UCF Local Programming Contest 2016正式赛

一.解题

1.Majestic 10

题意:几个大于十的,最水的,感觉

AC代码:

#include<iostream>
#define N 10
using namespace std;
int main()
{
int n,i,a[N];
cin>>n;
while(n--){
int count=0;
for(i=1;i<=3;i++){
cin>>a[i];
if(a[i]>=10)count++;
}
for(i=1;i<3;i++){
cout<<a[i]<<" ";
}
cout<<a[i]<<endl;
if(count==0)
cout<<"zilch"<<endl;
else if(count==1)
cout<<"double"<<endl;
else if(count==2)
cout<<"double-double"<<endl;
else cout<<"triple-double"<<endl;
cout<<"\n";
}
}

二.补题

1.Phoneme Palindromes

题意:和回文字符串类似,只是某些不同的字母会等价为相同的

我没看懂题解,借鉴了同学的思路,用并查集来做

AC代码:

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
#define N 100001
int father[N];
int find(int x){
while(father[x]!=x)//自己是自己,根节点
x=father[x];//不是继续找,找老大
return x;
}
void merge(int a,int b){
int a1=find(a);//找到根节点,找到老大
int b1=find(b);
if(a1!=b1)//老大不同,认主
father[a1]=b1;
}
int main()
{
int t,case1=0;
cin>>t;
while(t--){
printf("Test case #%d:\n",++case1);
int w;
cin>>w;
for(int i='a';i<='z';i++){
father[i]=i;//每个人是自己的掌门
}
while(w--){
char q,p;
cin>>q>>p;
merge(q,p);
}
int m;
cin>>m;
for(int i=1;i<=m;i++){
int r=1;
string s;
cin>>s;
int d=s.size();
if(d==1){cout<<s<<" "<<"YES"<<endl;continue;}
else{
for(int j=0;j<d/2;j++){
if(father[s[j]]!=father[s[d-j-1]]){//这个判断是因为两边一样,值就一样,不一样时,看是不是一个集合的,,也是赋初值意义所在
r=0;
cout<<s<<" "<<"NO"<<endl;
break;
}
}
if(r==1)cout<<s<<" "<<"YES"<<endl;
}
}
cout<<endl;
}
}

扫描二维码关注公众号,回复: 10347999 查看本文章

猜你喜欢

转载自www.cnblogs.com/1324a/p/12607039.html