A Array Coloring
题目大意就是数组中的元素任意染成两种颜色,让被这两种颜色染上的数字各自加起来的奇偶性相同,相同输出YES,不相同输出NO
思路
奇偶性关键是由数组中奇数的个数决定的,统计一下数组中奇数的个数,如果个数是奇数,那么肯定凑不成,反之能凑成
AC代码
#include <bits/stdc++.h> using namespace std; int t; void solve() { int n; cin >> n; int cnt = 0; while(n --) { int x; cin >> x; if(x % 2 != 0)cnt ++; } if(cnt % 2 == 0) cout << "YES" <<endl; else cout << "NO" << endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t --) { solve(); } return 0; }
B Maximum Rounding
题目大意是给一个数,可以对他的每一位进行四舍五入,大于5的就可以直接进一位,求这个数被舍入后的最大值,例如99
被舍入后最大值能到100
思路
因为题目给定的数据范围较大,每个数字的长度能达到2*10^5
,所以要选择采用字符串输入,从后往前 统计每一位的数字,定义一个进位的变量,如果这一位大于5,那么从这一位开始的后面的数字都要变成0,所以还要定义一个标志位,标志一下看从哪一位开始需要变0,如果最后一位的进位(因为是从后往前,在这里最后一位就是这个字符串的第一位)是1,这种就是类似 99
的情况,所以前面应该拼接上一个1
AC代码
#include <iostream> #include<vector> #include<cstring> using namespace std; int t; void solve() { string a; cin >> a; int n = a.size(); int tmp = 0; // 进位 int k = n; //标志位 for (int i = n - 1; i >= 0; i -- ) { if(a[i] + tmp >= '5') { k = i; tmp = 1; }else { a[i] += tmp; tmp = 0; } } for (int i = k; i < n; i ++) { a[i] = '0'; } if(tmp) { a = '1' + a; } cout << a << endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t --) { solve(); } return 0; }