B. Make AP
思路:等差数列的性质列一下式子,会发现只有一个未知量,就是我们需要乘的x。
#includeusing namespace std; int t, a, b, c; int main(){ cin >> t; while(t -- ){ cin >> a >> b >>c; if((2 * b - c)%a == 0 && 2 * b - c > 0){ cout <<"YES" < 0){ cout <<"YES" < C. Division by Two and Permutation
思路:优先队列。大数可以做到,那么小数也是可以做到的。所以直接从大数开始判断。#includeusing namespace std; int t, n, a[55], x; bool flag; signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >>t; while(t --){ cin >> n; flag = 0; priority_queue q; for(int i = 1; i <= n; i++){ cin >> x; q.push(x); } for(int i = n; i >= 1; i --){ while(q.top() > i){ int x = q.top(); q.pop(); q.push(x / 2); } if(q.top() != i){ cout <<"NO" << endl; flag = 1;break; } q.pop(); } if(!flag) cout <<"YES" << endl; } } D. Palindromes Coloring
思路:看到有的人说二分做法,但其实直接解出来也可以。回文串的话,一般来说,就是前后对称,所以我们把个数是2的倍数的字母直接提取出来。然后再将剩下的字母计算一下个数,因为有一种情况,是字符数为奇数的回文串。#includeusing namespace std; int t, n, k, cnt[30], num1, num2; signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> t; while(t --){ string st; num1 = 0; num2 = 0; memset(cnt, 0, sizeof cnt); cin >> n >>k; cin >>st; for(int i = 0; i < st.length(); i++){ int x = st[i] - 'a'; cnt[x]++; } for(int i = 0; i < 26; i++){ if(cnt[i] % 2 != 0) num1 ++; num2 += cnt[i] / 2; } num1 += (num2 % k) * 2; if(num1 >= k){//看能不能组成个数为奇数的回文串 cout << num2 / k * 2 + 1< 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)