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 }