Hurry Up | ||
Accepted : 6 | Submit : 43 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
Problem DescriptionGG is some what afraid of his MM. Once his MM asks, he will always try his best to rush to their home. InputMultiple test cases. First line, an integer T ( 1 ≤ T ≤ 2000 ), indicating the number of test cases. OuputFor each test case, output a real number with 2 digits after the arithmetic point. It is the shorest time for GG to reach home. Sample Input2 1 1 2 2 1 2 1 1 2 2 1 7 Sample Output1.41 1.32 |
#include <stdio.h>
#include <math.h>
#define inf 1e-10
double xo,yo,x2,y2,vr,vt;
double dis(double a,double b,double c,double d)
{
return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
double talk(double ex,double ey)
{
return dis(xo,yo,ex,ey)/vr;
}
double taxi(double sx,double sy)
{
return dis(sx,sy,x2,y2)/vt;
}
double calc(double x)
{
// f(x) = -(x-3)^2 + 2;
double a=(x-xo)*(x-xo)+yo*yo;
double b=(x-x2)*(x-x2)+y2*y2;
return sqrt(a)/vr+sqrt(b)/vt;
}
double ternarySearch(double low, double high)
{
double mid, midmid;
while (low + inf < high)
{
mid = (low + high) / 2;
midmid = (mid + high) / 2;
double mid_value = calc(mid);
double midmid_value = calc(midmid);
if (mid_value <= midmid_value)
high = midmid;
else
low = mid;
}
return low;
}
int main()
{
int n;
scanf("%d",&n);
double onlytalk,twoway=0,temp,m;
while(n--)
{
scanf("%lf%lf%lf%lf%lf%lf",&xo,&yo,&x2,&y2,&vr,&vt);
//printf("%lf%lf%lf%lf%lf",xo,yo,x2,y2,vr,vt);
temp=dis(xo,yo,x2,y2);
onlytalk=temp/vr;//只步行
if(xo<x2)
m=ternarySearch(xo,x2);//搭车的点
else
m=ternarySearch(x2,xo);//搭车的点
twoway=talk(m,0.0)+taxi(m,0.0);
printf("%.2lf\n",(onlytalk<twoway?onlytalk:twoway));
}
return 0;
}
陆军棋,又称陆战棋,简称军棋,是中国近代的一种两人棋类,设计根据军队中的军阶。每一方有25枚棋子,先夺得对方军旗者为胜。
棋子
每一方的棋子为25枚,包括:
军阶高低 | 棋子名称 | 各方枚数 | 特殊能力 |
---|---|---|---|
1 | 司令 | 1 | 无 |
2 | 军长 | 1 | 无 |
3 | 师长 | 2 | 无 |
4 | 旅长 | 2 | 无 |
5 | 团长 | 2 | 无 |
6 | 营长 | 2 | 无 |
7 | 连长 | 3 | 无 |
8 | 排长 | 3 | 无 |
9 | 工兵 | 3 | 铁路上格数不限并可转弯,攻击胜过地雷 |
M | 地雷 | 3 | 不能移动,胜过其他一切攻击棋子,工兵/炸弹除外 |
B | 炸弹 | 2 | 遇到敌方棋子皆同归于尽,军旗也不例外 |
F | 军旗 | 1 | 不能移动,被攻击则拥有者输掉游戏 |
胜负一览
司令 > 军长 > 师长 > 旅长 > 团长 > 营长 > 连长 > 排长 > 工兵
炸弹与任何棋子相遇时,双方都消失
工兵 > 地雷
地雷 > 除炸弹和工兵以外的任何子粒
题目要求
请你帮忙判断两个棋子相碰时,谁出局。
输入
多组测试数据,每组数据占一行
每行有两个数字或字母,之间用空格隔开,表示前者经过移动,与后者相碰。
1 表示司令 2 表示军长 3 表示师长 4 表示旅长 5 表示团长 6 表示营长 7 表示连长 8 表示排长 9 表示工兵 M 表示地雷 B 表示炸弹 F 表示军旗
输出
对于每组数据输出一行,为两人的官阶比较结果
1 表示前者官阶比后者大
-1 表示前者官阶比后者小
0 表示两人同归于尽
Error 表示出错(军旗和地雷不能主动移动)
Bingo 表示前者获得胜利(扛取对方军旗)
样例输入
1 2 B M 9 1 B F 1 F M 1 F 1
样例输出
1 0 -1 Bingo Bingo Error Error
#include <stdio.h>
#include <math.h>
char a[2],b[2];
int main()
{
while(~scanf("%s%s",a,b))
{
if(a[0]=='M'||a[0]=='F')
{printf("Error\n");continue;}
if(b[0]=='F')//军旗
{printf("Bingo\n");continue;}
if(a[0]=='B'||b[0]=='B')
{printf("0\n");continue;}
if(a[0]=='9'&&b[0]=='M')//工兵 地雷
{printf("1\n");continue;}
if(b[0]=='M')
{printf("-1\n");continue;}
if(a[0]>b[0])
printf("-1\n");
else if(a[0]==b[0])
printf("0\n");
else
printf("1\n");
}
return 0;
}
Five Tiger | ||
Accepted : 8 | Submit : 10 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
题目描述五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨。 o...o ..... ..o.. ..... o...o 五虎(5分): o.o .o. o.o 通天(5分): ..... ..o.. o.... ooooo ..o.. .o... ..... ..o.. ..o.. ..... ..o.. ...o. ..... ..o.. ....o 四斜(4分): ...o. ..... ..... .o... ..o.. o.... ....o ..o.. .o... .o... ...o. ...o. o.... ..o.. ..o.. ....o ..... ...o. .o... ..... 三斜(3分): ..o.. ..... ..... ..o.. .o... ..... ..... ...o. o.... o.... ....o ....o ..... .o... ...o. ..... ..... ..o.. ..o.. ..... 小斗(1分): oo oo 例1 o...o .o.o. ..o.. .oooo o..oo o这名玩家形成了 1个大五虎(10分), 1个小五虎(5分), 2个通天(10分), 1个小斗(1分). 总分:10 + 5 + 10*2 + 1 = 36 .o.o. o.o.o .o.o. o.o.o .o.o. o这名玩家形成了 4个小五虎, 4个四斜 总分 5*4 + 4*4 = 36 输入多组测试数据。首先是一个整数T ( 1 ≤ T ≤ 10000 ),占一行,表示测试数据的组数. 输出对于每组测试数据,输出一行. 结果为两个整数,之间用一个空格隔开,分别表示先手(x)的得分,和后手(o)的得分。 样例输入2 oxxxo xoxox xxoxx xoooo oxxoo xoxox oxoxo xoxox oxoxo xoxox 样例输出9 26 57 36 |
#include <stdio.h>
#include <math.h>
char a[6][6];
int check(char ch)
{
int sum=0,k,l;
if(a[0][0]==ch&&a[2][2]==ch&&a[4][4]==ch&&a[4][0]==ch&&a[0][4]==ch)
sum+=10;//大五虎
for(k=0;k<=2;k++)
for(l=0;l<=2;l++)//五虎
{
if(a[k][l]==ch&&a[k+1][l+1]==ch&&a[k+2][l+2]==ch&&a[k+2][l]==ch&&a[k][l+2]==ch)
sum+=5;
}
for(k=0;k<5;k++)//通天
{
for(l=0;l<5;l++)
if(a[k][l]!=ch)
break;
if(l==5)
sum+=5;
for(l=0;l<5;l++)//通天vertical
if(a[l][k]!=ch)
break;
if(l==5)
sum+=5;
}
for(k=0;k<5;k++)//通天 斜的1
if(a[k][k]!=ch)
break;
if(k==5)
sum+=5;
for(k=0;k<5;k++)//通天 斜的2
if(a[4-k][k]!=ch)
break;
if(k==5)
sum+=5;
for(k=0;k<4;k++)// 四斜 斜的1
if(a[3-k][k]!=ch)
break;
if(k==4)
sum+=4;
for(k=1;k<5;k++)// 四斜 斜的2
if(a[k][k-1]!=ch)
break;
if(k==5)
sum+=4;
for(k=1;k<5;k++)// 四斜 斜的3
if(a[5-k][k]!=ch)
break;
if(k==5)
sum+=4;
for(k=0;k<4;k++)// 四斜 斜的4
if(a[k][k+1]!=ch)
break;
if(k==4)
sum+=4;
for(k=0;k<3;k++)// 三 斜的1
if(a[2-k][k]!=ch)
break;
if(k==3)
sum+=3;
for(k=2;k<5;k++)// 三斜 斜的2
if(a[k][k-2]!=ch)
break;
if(k==5)
sum+=3;
// 三斜 斜的3
if(a[4][2]==ch&&a[3][3]==ch&&a[2][4]==ch)
sum+=3;
if(a[0][2]==ch&&a[1][3]==ch&&a[2][4]==ch)// 三斜 斜的4
sum+=3;
for(k=0;k<=3;k++)
for(l=0;l<=3;l++)
{
if(a[k][l]==ch&&a[k][l+1]==ch&&a[k+1][l]==ch&&a[k+1][l+1]==ch)
sum+=1;
}
return sum;
}
int main()
{
int n,i;
scanf("%d",&n);
while(n--)
{
for(i=0;i<5;i++)
{
scanf("%s",a[i]);
}
printf("%d %d\n",check('x'),check('o'));
}
return 0;
}