Codeforces Round #429 (Div. 2)ABC

A:

题意:n个东西,k个朋友,全部给朋友,每个朋友不可以拿同样的,问是否可行

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 map<char ,int >ma;
 5 int main(){
 6     int n,k;
 7     cin>>n>>k;
 8     string s;
 9     cin>>s;
10     for(int i=0;i<n;i++){
11         ma[s[i]]++;
12         if(ma[s[i]]>k){
13             cout<<"NO"<<endl;return 0;
14         }
15     }
16     cout<<"YES"<<endl;
17     return 0;
18 }

B

题意:A可以选任意不为0长度的和为奇数的数字,B可以选任意不为0长度的和为偶数的数字,问谁赢

思路:奇数+奇数=偶数,如果和为奇数,A赢,如果为偶数且有一个奇数,A赢

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 
 5 ll a[1000005];
 6 
 7 int main(){
 8     int n;
 9     cin>>n;
10     ll x,sum=0,t=0;
11     for(int i=1;i<=n;i++){
12         scanf("%lld",&x);
13         sum+=x;
14         if(x&1) t=1;
15     }
16     if(sum&1) cout<<"First"<<endl;
17     else {
18         if(t) cout<<"First"<<endl;
19         else cout<<"Second"<<endl;
20     }
21     return 0;
22 }

C

题意:a重新排序,问f(ai,bi)最大,f(a,b)为从1-a种选择b个数字,最小的那个数字的贡献

思路:推一推即可发现,最小的b配最大的a

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 struct node{
 5     int  x;
 6     int y;
 7     int id;
 8 }b[200005];
 9 int a[200005];
10 bool cmp(node p,node q){
11     return p.x>q.x;
12 }
13 bool cmp1(node p,node q){
14     return p.id<q.id;
15 }
16 int main(){
17     int n;
18     cin>>n;
19     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
20     for(int i=1;i<=n;i++){
21         scanf("%d",&b[i].x);
22         b[i].id=i;
23     }
24     sort(a+1,a+1+n);
25     sort(b+1,b+1+n,cmp);
26     for(int i=1;i<=n;i++) b[i].y=a[i];
27     sort(b+1,b+1+n,cmp1);
28     for(int i=1;i<=n;i++){
29         printf("%d ",b[i].y);
30     }
31 }
原文地址:https://www.cnblogs.com/hhxj/p/7396086.html