Codeforces Round #124 (Div. 2)(一)

2014-11-24 11:53:43 · 作者: · 浏览: 0

A:博弈问题,一个矩形中,放入半径等于r的圆,谁不能放,就输了。
一开始比较茫然,仔细想一下发现有对称性质,一开始在中心放入一个圆,便将矩形分为对称区域,对手放入一个圆,则自己可以在对称的区域相同的位置放入圆。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#define N 105
using namespace std;
int main(){
int a,b,r;
while(scanf("%d%d%d",&a,&b,&r)!=EOF){
if(2*r>a||2*r>b)
printf("Second\n");
else
printf("First\n");
}
return 0;
}

B:取极限问题,比较简单,想清楚所有的情况就OK了
[cpp]
#include
#include
#include
#include
#include
#include
#define N 105
using namespace std;
int gcd(int a,int b){
return b==0 a:gcd(b,a%b);
}
int main(){
int n,m;
int a[105],b[105];
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=0;i<=n;i++)
scanf("%d",&a[i]);
for(int j=0;j<=m;j++)
scanf("%d",&b[j]);
if(n==m){
if(a[0]*b[0]<0)
printf("-");
printf("%d/%d\n",abs(a[0])/gcd(abs(a[0]),abs(b[0])),abs(b[0])/gcd(abs(a[0]),abs(b[0])));
}
else if(n>m){
if(a[0]*b[0]<0)
printf("-");
printf("Infinity\n");
}
else
printf("0/1\n");
}
return 0;
}

C:选出字典序最大的子序列,维护一个单调栈就OK了
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#define N 105
using namespace std;
char str[200005];
stacks,ans;
int main(){
while(scanf("%s",str)!=EOF){
while(!s.empty())
s.pop();
while(!ans.empty())
ans.pop();
int len=strlen(str);
for(int i=0;i if(s.empty())
s.push(str[i]);
else{
if(str[i]<=s.top())
s.push(str[i]);
else{
while(1){
if(s.empty())
break;
if(str[i]>s.top())
s.pop();
else
break;
}
s.push(str[i]);
}
}
}
while(!s.empty()){
ans.push(s.top());
s.pop();
}
while(!ans.empty()){
printf("%c",ans.top());
ans.pop();
}
printf("\n");
}
return 0;
}

D:一个无限大的地图,问是否能无限走下去。
对于每一个位置,如果可以从多个位置到达,则说明进入了循环,便将是可以无限移动的。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-10
#define LL long long
#define LD long double
#define pi acos(-1.0)
using namespace std;
struct Node{
int x,y;
}s,u,v,tt;
int n,m;
int way[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
bool flag[1505][1505];
int vis[1505][1505][2];
char str[1505][1505];
bool bfs(){
queueque;
que.push(s);
memset(flag,false,sizeof(flag));
while(!que.empty()){
u=que.front(); www.2cto.com
que.pop();
for(int i=0;i<4;i++){
v=u;
v.x+=way[i][0];
v.y+=way[i][1];
tt.x=((v.x%n)+n)%n;
tt.y=((v.y%m)+m)%m;
if(str[tt.x][tt.y]=='#')
continue;
if(flag[tt.x][tt