A - Juggling Letters
给定n个字符串,统计每个字母出现的次数,判断能不能均匀分到每个字符串,让它们变成一样的字符串
#include <bits/stdc++.h> #define p123 printf("123 "); #define pn printf(" "); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int t,n,i,j; cin>>t; while(t--){ cin>>n; string s; int a[30]={0}; for(i=0;i<n;i++){ cin>>s; for(j=0;j<s.length();j++){ a[s[j]-'a']++; } } for(i=0;i<26;i++){ if(a[i]%n!=0){ cout<<"NO"<<endl; break; } } if(i==26){ cout<<"YES"<<endl; } } return 0; }
B - Power Sequence
有一个长度为n的序列,你每次可以对序列重新排序,然后花费1使某个元素加减1,多次操作后使得新序列是等比数列,求最小花费.
枚举,公比 。
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define ture true const int N = 500010; int n; int a[N]; int main() { scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); } ll mi=1e18; sort(a+1,a+1+n); for(int i=1;i<=100000;++i){ ll cnt=0; ll tmp=1; for(int j=1;j<=n;++j){ cnt+=abs(tmp-a[j]); if(cnt>mi) break; tmp*=i; } if(cnt<mi) mi=cnt; } printf("%lld ",mi); return 0; }
D - Drinks Choosing
给出n个学生,k个饮料,每个学生想要的饮料,记录每种饮料的需求个数,算出要买多少份饮料才能满足所有学生的需求sum
由于买饮料的分数不能超过n/2,如果sum<n/2所有人都可以被满足,否则输出n-(sum-n/2)
#include <bits/stdc++.h> #define p123 printf("123 "); #define pn printf(" "); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int n,k,a[1010]={0},i,b; cin>>n>>k; for(i=0;i<n;i++){ cin>>b; a[b]++; } int sum=0,flag=0; for(i=1;i<=k;i++){ if(a[i]%2!=0){ sum+=a[i]/2+1; flag++; }else{ sum+=a[i]/2; } } int x=n/2+n%2; if(sum>x){ cout<<n-(sum-x)<<endl; }else{ cout<<n<<endl; } return 0; }
E - Sport Mafia
Alya可以选择在箱子内放入i个糖果(i等于放入糖果的次数),或吃掉一个糖果
给出放入或吃掉糖果的次数 和 最终剩余糖果的数量
求出一个吃了几次糖果
当箱子里的糖果小于等于最终剩余的糖果数,就添加糖果,否则就吃糖果
当次数用完后跳出循环,输出一共吃了几个糖果
#include <bits/stdc++.h> #define p123 printf("123 "); #define pn printf(" "); #define pk printf(" "); #define ll long long #define re(n,a) memset(n,a,sizeof(n)); #define len(a) strlen(a) #define eps 1e-6 using namespace std; int main() { int n,k,dq=0,eat=0,a; int flag=0; cin>>n>>k; while(n>0){ if(dq<=k){ dq+=++flag; n--; //cout<<dq<<"**1"<<endl; } if(dq>k){ eat+=dq-k; n-=dq-k; //cout<<dq<<"**2"<<endl; dq=k; } } cout<<eat<<endl; return 0; }