Problem A. Bad Horse
题意:给n个关系,每个关系有两个人,要求把这些人分成两组,每组里的人之间都没有关系。
二分图染色即可。关系=边,人=点。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#define ll __int64
#define INF 0x3fffffff
using namespace std;
int G[105][105];
int col[105];
int k;
bool bfs(int s) {
queue<int> p;
p.push(s);
col[s] = 1;
while(!p.empty()) {
int from = p.front();
p.pop();
for(int i = 1; i <= k; i++) {
if(G[from][i] && col[i] == -1) {
p.push(i);
col[i] = !col[from];//染成不同的颜色
}
if(G[from][i] && col[from] == col[i])//颜色有相同,则不是二分图
return false;
}
}
return true;
}
int main()
{
//freopen("d:\\A-small-2-attempt0.in","r",stdin);
//freopen("d:\\output.txt","w",stdout);
int n,T,t=1;
cin>>T;
while(T--){
cin>>n;
k=0;
map<string,int>m;
memset(G,0,sizeof(G));
memset(col, -1, sizeof(col));
for(int i=0;i<n;i++){
char a[105],b[105];
cin>>a>>b;
if(!m[a]) m[a]=++k;
if(!m[b]) m[b]=++k;
G[m[a]][m[b]]=1;
G[m[b]][m[a]]=1;
}
bool flag=false;
for(int i=1;i<=k;i++){
if(col[i]==-1&&!bfs(i)){
flag=true;
break;
}
}
if(!flag) cout<<"Case #"<<t++<<": "<<"Yes"<<endl;
else cout<<"Case #"<<t++<<": "<<"No"<<endl;
}
return 0;
}<strong>
</strong>
Problem B. Captain Hammer
题意:给出斜抛运动的速度和水平位移,求斜抛角度。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#define ll __int64
#define INF 0x3fffffff
using namespace std;
int main()
{
//freopen("d:\\Test.txt","r",stdin);
//freopen("d:\\output.txt","w",stdout);
int T,t=1;
cin>>T;
while(T--){
double v,d,c;
cin>>v>>d;
c=asin(9.8*d/v/v) * 180.0/3.1415926/2.0;
cout<<"Case #"<<t++<<": ";
printf("%.7f\n",c);
}
return 0;
}
Problem C. Moist
题意:给n个字符串,要求按字典序排序,排序方法为从上往下扫,遇到一个比上面里的小的,就交换位置。求交换次数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#define ll __int64
#define INF 0x3fffffff
using namespace std;
char s[105][105];
int n;
int main()
{
//freopen("d:\\C-small-2-attempt0.in","r",stdin);
//freopen("d:\\output.txt","w",stdout);
int T,t=1;
cin>>T;
while(T--){
cin>>n;
getchar();
for(int i=0;i<n;i++){
gets(s[i]);
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(strcmp(s[j],s[i])>0){
swap(s[j],s[i]);
ans++;
break;
}
}
}
cout<<"Case #"<<t++<<": "<<ans<<endl;
}
return 0;
}