2020/3/28 UCF Local Programming Contest 2016
A .Majestic 10
题意:判断每组数据有几个大于10的;

#include<iostream> #include<cmath> using namespace std; int a[1000],b[1000],c[1000],counts[10000]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]>>b[i]>>c[i]; if(a[i]>=10) counts[i]++; if(b[i]>=10) counts[i]++; if(c[i]>=10) counts[i]++; } for(int i=1;i<=n;i++){ cout<<a[i]<<" "<<b[i]<<" "<<c[i]<<endl; if(counts[i]==0){ cout<<"zilch"<<endl; }else if(counts[i]==1){ cout<<"double"<<endl; }else if(counts[i]==2){ cout<<"double-double"<<endl; }else{ cout<<"triple-double"<<endl; } if(i<n){ cout<<endl; } cout<<"1"; } return 0; }
B. Phoneme Palindromes
题意:将同音的字母替换为相同的字母,在判断是否为回文即可,是输出YES,不是输出NO

#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> using namespace std; bool palindrome( string s ){ int i,j; int len=s.length(); for(i=0;i<=len/2;i++){ if(s[i]!=s[len-i-1]){ return false; } } return true; } int main(){ int n,i,j,k,cases,p,q; char a[15],b[15]; cin>>n; for(cases=1;cases<=n;cases++){ cout<<"Test case #"<<cases<<":"<<endl; cin>>p; for (i=0;i<p;i++){ cin>>a[i]; cin>>b[i]; } cin>>q; for(j=0;j<q;j++){ string s; cin>>s; cout<<s<<' '; for(i=0;i<s.length();i++){ for(k=0;k<p;k++){ if(s[i]==a[k]){ /*将音相同的字母替换为同一字母*/ s[i]=b[k]; } } } if(palindrome(s)){ //替换后判断是否为回文 cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } cout<<endl; } return 0; }
C. Don't Break the Ice
题意:如果策略中的行和列的冰块都曾被敲过,则无效

#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(){ int x,y; int i,j,a[60],b[60]; int t,cases,size,steps; cin>>t; for(cases=1;cases<=t;cases++){ int sum=0; memset(a,1,sizeof(a)); memset(b,1,sizeof(b)); cout<<"Strategy #"<<cases<<": "; cin>>size>>steps; for(i=1;i<=steps;i++){ cin>>x>>y; if(a[x]==0&&b[y]==0){ sum++; } a[x]=0,b[y]=0; } cout<<sum<<endl; if(cases!=t) cout<<endl; } return 0; }
D.Wildest Dreams
题意:如果女儿在在车不管到了哪首歌,都要立即跳到女儿喜欢的歌,如果女儿不在车上就按列表循环播放,求爸爸听了女儿喜欢的歌多少秒
女儿在奇数时间段里在车上,偶数时间段不在车上,女儿刚好离开时,歌曲按顺序播放,而不会到开头重复
遍历数组,如果是奇数,就加起来,并记录这首歌放到哪里,如果是偶数就和前面的记录相比,如果小就直接加,
如果大那就加上那一段在看看她喜欢的那首歌在后面占多长时间,加起来就可以,

#include<iostream> #include<cstdio> #include<set> #include<queue> #include<stack> #include<vector> #include<bitset> #include<cstring> #include<string> #include<algorithm> using namespace std; typedef long long ll; const int MAXN=1e5+10; inline int read(){ int x=0,y=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-'){ y=-1; } ch=getchar(); } while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*y; } int a[110];//代表每首歌曲播放时间 int main(){ int T=read(); for(int t=1;t<=T;t++){ int n=read(),m=read(); int it1=0,it2=0,sum=0; //it1为女儿喜欢歌曲开始时间 //it2为女儿喜欢歌曲结束时间 //sum为cd所有歌曲播放总时间 for(int i=1;i<=n;i++){ a[i]=read(); sum+=a[i]; if(i<m) { it1+=a[i]; } } it2=it1+a[m]; printf("CD #%d:\n",t); int p=read(); for(int k=1;k<=p;k++){ int ans=0,it=0; //it表示当前时间 int q=read(); for(int i=1;i<=q;i++){ int cnt=read(); if(cnt==0){ continue; } //当女儿在车上时答案直接加上当前路段时间 if(i%2==1){ ans+=cnt; if(cnt%(it2-it1)==0){ it=it2; } else{ it=it1+cnt%(it2-it1); } } //计算女儿不再车上时所听歌曲时间 else{ ans+=(it2-it1)*(cnt/sum); cnt%=sum; if(cnt<=it2-it){ ans+=cnt; } else{ ans+=it2-it; if(cnt>=sum-it+it1){ ans+=cnt-(sum-it+it1); } } it=(it+cnt)%sum; } } printf("%d\n",ans); } printf("\n"); } return 0; }