第一部分的培训为语法糖,stl容器以及复杂度。
题目分析
1.1 Long Loong AtCoder - abc336_a
这道题的重点在于多个o的输出。在保证前面‘L’ 的输出和后面‘ng’的输出下,输入需要输出的o的数字,来实现需要输出的效果。
代码如下
#include <stdio.h>
#include <string.h>
int main()
{
    int n, i;
    scanf("%d", &n);
    printf("L");
    for (i = 0; i < n; i++) {
        printf("o");//这里输出多个o
    }
    printf("ng");
    return 0;
} 
1.2 YES or YES? CodeForces-1703A
 
这道题重点在于不论你输入的yes y,e,s是否大写,都认为是yes,所以输出yes,如果其中有一个字符是错的,那么直接输出no,代码如下
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
	int n, i;
	char a[10000];
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		int flag = 0;
		
		cin >> a;
		int k = strlen(a);
		if (k == 3)
		{
			if ((a[0] == 'Y' || a[0] == 'y') && (a[1] == 'E' || a[1] == 'e') &&(a[2] == 's' || a[2] == 'S'))
				flag = 1;
		}
		if (flag == 1)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
} 
  
1.3 Even? Odd? G 洛谷 P2955 - Virtual Judge
这道题重点在与判断奇数或者偶数。如果只是简单的%2来判断,那么只会拿60分。注意到这个数字长度超出了long long的限制,所以我们考虑用字符串吃入这个数字,再判断最后一位是不是奇数或者偶数,代码如下
#include <stdio.h>
#include <string.h>
int main()
{
    int n, i;
    char a[10000000];
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%s", a);
        int k = strlen(a);
        if (a[k - 1] % 2 == 0)
        {
            printf("even\n");
        }
        else {
            printf("odd\n");
        }
    }
    return 0;
} 
  
1.4 Problem Generator CodeForces - 1980A
这道题目重点在于ABCDEFG 7种难度的题目里面,如果缺哪一种,就得想出相对应的问题。那么我们可以想到我们可以用数组来存储。如果一场比赛,我们有ABCDEF6道题目,那我们就只要想出G题,及一道题,如果对应道数组里面,即是a数组下标0,1,2,3,4,5的值都为1,6的值为0,那么我们就找出那个值小于轮数的成员,再对应算出该成员缺少的问题的数量
代码如下
#include <iostream>
#include <string>
#include <vector> 
using namespace std;
int solve(int n, int m, std::string a) {
	std::vector<int> cnt(7, 0);
	for (char c : a) {
		if (c == 'A') 
			cnt[0]++;
		else if (c == 'B') 
			cnt[1]++;
		else if (c == 'C') 
			cnt[2]++;
		else if (c == 'D')
			cnt[3]++;
		else if (c == 'E') 
			cnt[4]++;
		else if (c == 'F')
			cnt[5]++;
		else if (c == 'G') 
			 cnt[6]++;
	}
	n = 0;
	for (int i = 0; i < 7; ++i) {
		if (cnt[i] < m) {
			n += m - cnt[i];
		}
	}
	return n;
}
int main() {
	int t;
	std::cin >> t;
	while (t--) {
		int n, m;
		std::cin >> n >> m;
		std::string a;
		std::cin >> a;
		std::cout << solve(n, m, a) << std::endl;
	}
	return 0;
} 
  
1.5 rules 洛谷 - B4012
 
这道题的重点在于统计出每一天遵守规则k的人数,以及是否有一半的天数都有每天有一半以上的人遵守规则k。这边注意的是一半不能用int类型,会吃掉所有的小数点的数字,造成误差,代码如下
#include <stdio.h>
int main()
{
	int i, j, t, k, n, x, a, b;
	int cnt2 = 0;
	scanf("%d %d %d", &n, &t, &k);
	a =( n +1) / 2;
	b =( t +1) / 2;
	for (i = 1; i <= t; i++)
	{
		int cnt1 = 0;
		for (j = 1; j <= n; j++)
		{
			scanf("%d", &x);
			if (x == k)
				cnt1++;
		}
		if (cnt1 >= a)
		{
			cnt2++;
		}
	}
	if (cnt2 >= b)
	{
		printf("YES\n");
	}
	else
	{
		printf("NO\n");
	}
	return 0;
} 
  



















