cf591div2abc

匿名 (未验证) 提交于 2019-12-03 00:13:02

cf遭到了 ddos 攻击, 所有三天内的所有比赛 unrated, 难受~~~

https://codeforces.com/contest/1223/problem/A

#include<bits/stdc++.h>  using namespace std;  int main(){     int t; cin >>t;     while(t--) {         int n; cin>>n;          cout<<((n==2)? 2 : n&1) << endl;     }     return 0; }

https://codeforces.com/contest/1223/problem/B

t.

题意: 两个字符串 每次可以进行两个字符的赋值 比如 abcd -> aacd, 问是否能将 s 变成 t

关键是 s 与 t 都能进行任意次的赋值, 所以无论s t 是啥, 只有里面有相同的字符 就能都变成 单个字符的字符串, s t 有相同字符则YES

/* 3 xabb aabx technocup technocup a z  YES YES NO */ #include<bits/stdc++.h> using namespace std; #define _for(i,a,b) for(int i = (a); i < (b); i++)     #define _rep(i,a,b) for(int i = (a); i <= (b); i++)  int main(){     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);     int t; cin>>t;     while(t--){         string s,t; cin>>s>>t;          int n = s.size(), a = 0, b = 0;         _for(i,0,n) a |= (1<<(s[i]-'a'));         _for(i,0,n) b |= (1<<(t[i]-'a'));         cout<<((a&b) ? "YES\n": "NO\n");     }     return 0; }

https://codeforces.com/contest/1223/problem/C

题解做法是二分区间,利用区间a b 倍数赋值 再排序, 再取区间和 大于 k 的最小区间

#include<bits/stdc++.h> using namespace std;  #define _for(i,a,b) for(int i = (a); i < (b); i++) #define _rep(i,a,b) for(int i = (a); i <= (b); i++) const int N = 2e5+100; int t,n,x,y,a,b,p[N],c[N];  int main(){     scanf("%d", &t);     while(t--) {         scanf("%d", &n);         _for(i,0,n) scanf("%d", &p[i]), p[i] /= 100;         scanf("%d%d", &x, &a);         scanf("%d%d", &y, &b);         long long k;scanf("%lld", &k);         sort(p, p+n); reverse(p, p+n);         int l = 0, r = n;         while(l < r) {//             int mid = (l+r)>>1;             _rep(i,1,mid+1) {                 int z = 0;                 if(i%a == 0) z += x;                 if(i%b == 0) z += y;                 c[i-1] = z;             }             sort(c, c+mid); reverse(c, c+mid);             long long sum = 0;             _for(i,0,mid) sum += 1ll*c[i]*p[i];             if(sum >= k) r = mid; else l = mid;         }         if(r <= n)printf("%d\n", r); else printf("-1\n");     }     return 0; } /* 4 1 100 50 1 49 1 100 8 100 200 100 200 100 200 100 100 10 2 15 3 107 3 1000000000 1000000000 1000000000 50 1 50 1 3000000000 5 200 100 100 100 100 69 5 31 2 90  */

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!