A题(水题)判断三个数有多少大于10的;
B题是给你一个字符串判断是否是回文字符串,有一个限定条件是会给你几对字母,这几对字母看做相同的字母,这题用并查集的思想,定义一个数组a如果两个字母的a[i]相等那么他们就相同;
代码:
#include<bits/stdc++.h> using namespace std; int a[1000]; int find(int x) { if(x==a[x])return x; else return find(a[x]); } void uni(int x,int y) { x=find(x); y=find(y); if(x!=y)a[x]=a[y]; } int main() { int t; cin>>t; for(int k=1;k<=t;k++) { printf("Test case #%d:\n",k); int n,m; for(int i='a';i<='z';i++)a[i]=i; cin>>n; for(int i=0;i<n;i++) { char b,c; cin>>b>>c; uni(b,c); } cin>>m; while(m--) { string s; cin>>s; cout<<s<<" "; int l=s.length(); int flag=0; for(int i=0;i<l;i++) { if(a[s[i]]!=a[s[l-i-1]])flag=1; } if(flag==0)cout<<"YES"<<endl; else cout<<"NO"<<endl; } cout<<endl; } }
C题就是某一格子必须那一行和那一列都有格子被经过就会掉下来,所以定义一个二维数组,然后走过一格的时候记录那一行被走过那一列被走过,如果同时被走过,那这个格子就是无效的,记录有多少个无效的格子就可以。
D题就是遍历这个数组,如果是奇数,就加起来,在记录这首歌放到哪里,如果是偶数就和前面的记录相比,如果小就直接加,如果大那就加上那一段在看看她喜欢的那首歌在后面占多长时间,加起来就可以,代码:
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; for(int k=1;k<=t;k++) { printf("CD #%d:\n",k); int n,m; cin>>n>>m; int a[25],sum=0; for(int i=1;i<=n;i++) { cin>>a[i]; sum+=a[i]; } int u; cin>>u; while(u--) { int v,num,b[100],ans=0; cin>>v; for(int i=1;i<=v;i++) { scanf("%d",&b[i]); if(i%2==1){ ans+=b[i]; if(b[i]%a[m]==0)num=0; else num=(b[i]/a[m]+1)*a[m]-b[i]; } else { if(b[i]<num){ ans+=b[i]; } else{ ans+=num; b[i]-=num; ans+=(b[i]/sum)*a[m]; b[i]=b[i]%sum; if(b[i]>sum-a[m])ans+=b[i]-sum+a[m]; } } } cout<<ans<<endl; } cout<<endl; } }
E题好久没用搜索了,有点生疏,然后看这个还挺简单就直接写了,没想到...直接写简直难如上青天,改了好久的bug后终于写完了,我就是直接判断,代码太长没啥价值就不放了;