【闲话】
第一题:WWWWWWWWAA
第二题:AAAAAAAAAT
第三题:WWWWWWWAAA
第四题:AWWWWWWWWW
随手改了改….就成了
第一题:AAAAAAAAAA
第二题:AAAAAAAAAA
第三题:WWWWWWWAAA
第四题:AWWWWWWWWW
第三题其实也巨水,就是一个高中数学题,而且组合数连高精都不用加….
第四题一看就是动归,但是优先级条件太多,读不清楚,于是没有写…Maxingc贪心也似写出了方程,神奇也似AC了…Orz
【题目】
◇第一题
题目描述:
一年一度的CS联赛开始了,bright义无反顾地加入了比赛。作为一名正直的孩子,bright当然选择了当一名反恐精英。经过若干局的比赛,bright拥有了N元钱(N<=16000)。但是悲剧的是,bright不慎在上一局拆弹时炸弹引爆,英勇就义。所以这一局bright出来时,身上只有一把可怜的小手.枪。于是bright开始买枪了。你的任务是写一个买枪的程序,统计bright到底买了什么枪。
买枪的方法是这样:
先按下B键,进入购买主菜单;
接下来按一个数字,进入对应的枪械子菜单;
然后再按一个数字,购买对应的枪械或者其他物品(比如防爆盾)。
按1买手.枪:再按1~5 可分别买价格为400,500,600,650,750的手.枪
接下来的描述类似
2 散弹枪:1700,3000
3 微型冲锋枪:1250,1500,1700,2350
4 自动步枪:2250,2750,3100,3500,4200,4750
5 机关枪:5750 (俗称大菠萝)
6 主武器弹药:50
7 副武器弹药:25
8 装备:防弹衣650 防弹衣+头盔1000 闪光弹200 高爆手雷300 烟雾弹300 拆弹装备200 夜视仪1250 防爆盾2200
例如按下B43,bright就花了3100块买了他珍爱的M4
特别的是 购买弹药不需按第二个数字,只要按B6或B7就行了
简单起见,我们将第x类的第y件武器编号Bxy
其中要注意的是,主武器为菜单中的B2~B5类,副武器是B1类,就是手.枪,
一开始bright就拥有B12这把警用手.枪
当买了一把枪,如果bright持有对应的主武器或者副武器,并且持有的枪与购买的枪不同,那么bright会将原来的枪丢去,获得新枪。若持有相同的武器或者钱不够购买新枪则购买失败。
防爆盾属于主武器,拿盾时只能持手.枪(刀——也算吧),防爆盾不算枪
两种弹药最多各有5份,只能在当前拥有对应的武器时才能购买,若该武器被扔了,子弹也消失。不同的枪要配不同的子弹。
一开始没有弹药,没有枪时购买对应弹药也失败。
高爆手雷,烟雾弹,拆弹装备,夜视仪最多只能持有一个,若重复购买,则购买失败
闪光弹最多拿2个
对于防弹衣,没头盔的可以升级为头盔,当然也要花1000元,若是有了头盔的防弹衣再去买普通的防弹衣,购买也失败
钱不够肯定购买失败,失败时钱不变化,当前装备不变化。
输入说明:
第一行:开始拥有的钱N
第二行:一串字符,由若干部分组成,每段开头为一个B,之后有1个或2个数字。bright不会按错键,所以不必考虑错误按键造成的结果。每段之间没有分隔符,所以只有一行。一共不超过100个字符
输出说明:
第一行:一个整数,表示最后剩下了多少钱
第二行:输出主武器的编号,一个空格,及主武器弹药的数量(可为0)。没有主武器则输出empty。
第三行:输出副武器的编号,一个空格,及副武器弹药的数量(可为0)。没有副武器则输出empty。
第四行:输出剩余的装备,按字典序输出,有几个则输出几个,按字典序排列。中间没有任何分隔符。
输入样例
16000
B14B7B7B7B7B7B7B46B6B6B83B83B84
输出样例
9675
B46 2
B14 5
B83B83B84
【解析】
大模拟,一定要注意所有的条件。没啥说的…..以后不会再犯低级错误了。
◇第二题
题目描述:
Ymq和hy正在玩一个数字游戏,其中某人(恩~)暗暗请你帮助她获胜。这个游戏是这样的。一开始有一个数n(1<=n<=1000000),两个人轮流对n进行操作。每次可将n减去它的最大或最小的非零数位。比如3014最大的数位是4,最小的是1,于是它可以减去4或者1,分别产生3010和3013。直到n变成0时停止,谁将n变为0则获胜。
根据某种RP因素,游戏都由hy先做。
输入说明:
第一行是一个整数G(1<=G<=100),表示她们玩了G局游戏;
接下来G行每行是一个数n。
输出说明:
一共G行,每行输出一串字符。Hy赢了则输出hy,ymq赢了则输出ymq。
输入样例:
2
9
10
输出样例:
hy
ymq
【解析】
F[i]表示拿到i数字,hy是否手必胜策略。
边界 F[0]=false;F[1..9]=true;
方程F[i]=(not F[i-max])or(not F[i-min])
◇第三题
题目描述
回忆当年apio,与fish,bright,gx三巨牛玩拖拉机的场景还历历在目。其中有一局 gx和我打A,摸牌时都没人亮牌。刚摸完牌时,gx突然说:“我手上有个A”。此时bright开始嘀咕了,可能gx不止有一个A吧。可是仍然没有人亮牌。就在要翻底牌的时候,gx将手中的黑桃A亮了出来,此时fish大吼:“啊!你A怎么那么多?”。当时的我很是迷茫,于是想请教您:
1、Gx说手上有1个A,那么他手上有不止1个A的概率是多少?
2、GX亮出黑桃A后,他手上有不止1个A的概率又是多少?
为了描述更清楚些,规定一副牌有n张,gx拿到了m张,黑桃A只有一张,而A一共有K张(和正常的不一样哦)。底牌是归我的,而且gx是不会撒谎的。
输入说明:
一行3个由空格隔开的整数,n,m,k
输出说明:
输出一行,两个实数,空格隔开,小数点后保留4位。分别为第一个问题和第二个问题的答案
输入样例:
输出样例:
0.3696
0.5612
数据范围
对于30%的数据n<=30,m<=15
对于100%的数据m<=n<=1,000,000
【解析】
数学问题。
第一问只要看清有一张A了已经…
第二问也一样。
◇第四题
题目描述:
传说中的sunglasses男又在整队了。他站在主席台上,发现只有12班的队伍排的最差。然而你是传说班中的体育委员,在听到sunglasses男的大喝后便不得不整队伍了。传说班队伍中有n个哥,他们站成一排,第i个人分别距离你D_i(D_i是整数)。操场的宽度是L。现在你要命令哥们向前或向后移动了。sunglasses男的要求很苛刻,首先n-1个相邻的哥的距离必须尽可能的大,当然他想让距离尽可能得相同。因此任意两个相邻的哥相距必须与(L-1)/(n-1)【使用整数除法】相差最多为1,而且距离为(L-1)/(n-1)(整数除 div)的个数尽可能的多。比如说,当n=4,L=8时,可以满足的位置是1,3,5,8或1,3,6,8,但是1,2,4,7或1,2,4,8不可以。
现在你应该如何安排哥们移动,使得队伍满足sunglasses男的要求,并且移动的总步数尽量小。
哥们都必须在整数点移动并且坐标应该大于零(不能撞上你),不大于L(不能出操场)。
输入格式:
第1行:2个整数n和L
第2至n+1行:第i+1行表示D_i
输出格式:
一个整数,最小的总步数
输入样例:
5 10
2
8
1
3
9
输出样例:
4
说明:
2<=N<=1500
N<=L<=1,000,000
答案保证不大于1,000,000,000
【解析】
没解析,题都不理解
【代码】
1.CS
1: Program CS(input,output);2: const Need:array['1'..'5','1'..'6']of integer=3: ((400,500,600,650,750,0),4: (1700,3000,0,0,0,0),(1250,1500,1700,2350,0,0),5: (2250,2750,3100,3500,4200,4750),(5750,0,0,0,0,0));6: var s,tmp,MainAA,FuAA:string;7: money,i,clothes,MainBB,FuBB,shanguang:longint;8: Gaobao,Chaidan,Somke,Nightsight:boolean;9: Procedure Main;10: begin
11: tmp:='';tmp:=tmp+'B'+s[i+1]+s[i+2];12: if(money>=Need[s[i+1],s[i+2]])and(MainAA<>tmp)then13: begin
14: dec(money,Need[s[i+1],s[i+2]]);15: MainAA:=tmp;16: MainBB:=0;17: end;
18: end;
19: Procedure Fu;20: begin
21: tmp:='';tmp:=tmp+'B'+s[i+1]+s[i+2];22: if(money>=Need[s[i+1],s[i+2]])and(FuAA<>tmp)then23: begin
24: dec(money,Need[s[i+1],s[i+2]]);25: FuAA:=tmp;26: FuBB:=0;27: end;
28: end;
29: Procedure MainB;30: begin
31: if(MainBB<5)and(MainAA<>'')and(money>=50)then32: begin
33: inc(MainBB);34: dec(money,50);35: end;
36: end;
37: Procedure FuB;38: begin
39: if(FuBB<5)and(money>=25)then40: begin
41: inc(FuBB);42: dec(money,25);43: end;
44: end;
45: Procedure Extra;46: begin
47: case S[i+2] of48: '1' : if(Clothes=0)and(money>=650)then begin dec(money,650);clothes:=1;end;49: '2' : if(Clothes<>2)and(money>=1000)then begin dec(money,1000);clothes:=2;end;50: '3' : if(Shanguang<2)and(money>=200)then begin dec(money,200);inc(Shanguang);end;51: '4' : if(not Gaobao)and(money>=300)then begin dec(money,300);Gaobao:=true;end;52: '5' : if(not Somke)and(money>=300)then begin dec(money,300);Somke:=true;end;53: '6' : if(not Chaidan)and(money>=200)then begin dec(money,200);Chaidan:=true;end;54: '7' : if(not Nightsight)and(money>=1250)then begin dec(money,1250);Nightsight:=true;end;55: '8' : if(money>=2200)and(MainAA<>'B88')then56: begin
57: dec(money,2200);58: MainAA:='B88';59: end;
60: end;
61: end;
62: begin
63: assign(input,'cs.in');reset(input);
64: assign(output,'cs.out');rewrite(output);65: readln(money);readln(s);MainAA:='';FuAA:='B12';66: MainBB:=0;FuBB:=0;Clothes:=0;Shanguang:=0;Gaobao:=false;Somke:=false;Chaidan:=false;Nightsight:=false;67: i:=1;68: while i<=length(s) do69: begin
70: if s[i]='B' then71: begin
72: if s[i+2]='B' then73: begin
74: case s[i+1] of75: '6' : MainB;76: '7' : FuB;77: end;
78: inc(i);79: end else80: if s[i+3]='B' then81: begin
82: case s[i+1] of83: '1' : Fu;84: '2','3','4','5' : Main;85: '8' : Extra;86: end;
87: inc(i);inc(i);88: end;
89: end;
90: inc(i);91: end;
92: for i:=length(s) downto 1 do if s[i]='B' then break;93: if length(s)-i=1 then94: case s[i+1] of95: '6' : MainB;96: '7' : FuB;97: end else98: case s[i+1] of99: '1' : Fu;100: '2','3','4','5' : Main;101: '8' : Extra;102: end;
103: writeln(money);104: if MainAA<>'' then writeln(MainAA,' ',MainBB) else writeln('empty');105: if FuAA<>'' then writeln(FuAA,' ',FuBB) else writeln('empty');106: case clothes of107: 1 : write('B81');108: 2 : write('B82');109: end;
110: case Shanguang of111: 1 : write('B83');112: 2 : begin write('B83');write('B83');end;113: end;
114: if Gaobao then write('B84');115: if Somke then write('B85');116: if Chaidan then write('B86');117: if NightSight then write('B87');118: close(input);119: close(output);120: end.
2.CDgame
1: Program CDGame(input,output);2: var F:array[0..1000000]of boolean;3: max,min:array[0..1000000]of integer;4: G,k,n,i,j:longint;5: begin
6: assign(input,'cdgame.in');reset(input);
7: assign(output,'cdgame.out');rewrite(output);8: readln(G);9: fillchar(f,sizeof(f),true);10: F[0]:=false;for i:=1 to 9 do F[i]:=true;11: for i:=1 to 9 do begin max[i]:=i;min[i]:=i;end;12: for i:=10 to 1000000 do13: begin
14: j:=i mod 10;
15: if j>max[i div 10] then max[i]:=j else max[i]:=max[i div 10];16: min[i]:=min[i div 10];
17: if j>0 then18: if j<min[i] then min[i]:=j else min[i]:=min[i];19: F[i]:=(not F[i-max[i]])or(not F[i-min[i]]);20: end;
21: for i:=1 to G do22: begin
23: readln(n);if F[n] then writeln('hy') else writeln('ymq');24: end;
25: close(input);26: close(output);27: end.
3.Tuolaji
1: #include<cstdio>
2: double Cnm,C2,C3,ANS;
3: int n,m,k;
4: double Count(int n,int m)
5: { double R=1;
6: for(int i=1;i<=m;i++)R=R*(n-m+i)/i;
7: return R;
8: }
9: int main()
10: { freopen("tuolaji.in","r",stdin);
11: freopen("tuolaji.out","w",stdout);
12: scanf("%d%d%d",&n,&m,&k);
13: if(m+k>n)printf("1\n");
14: else{ Cnm=Count(n,m);
15: C2=Count(n-k,m);
16: C3=Count(n-k,m-1);
17: ANS=(Cnm-C2-C3*k)/(Cnm-C2);
18: printf("%.4lf\n",ANS);
19: }
20: n--;m--;k--;
21: if(m+k>n)printf("1\n");
22: else{ Cnm=Count(n,m);
23: C2=Count(n-k,m);
24: ANS=(Cnm-C2)/Cnm;
25: printf("%.4lf\n",ANS);
26: }
27: }
4.Sunglasses
1: #include<cstdio>
2: #include<cstring>
3: #include<cstdlib>
4: int f[2][1510],n,d[1510],L,l,i,j;
5: int CMP(const void*a,const void*b){return *(int*)a-*(int*)b;}
6: int MIN(int a,int b){return a<b?a:b;}
7: int main()
8: { freopen("sunglasses.in","r",stdin);
9: freopen("sunglasses.out","w",stdout);
10: scanf("%d%d",&n,&L);
11: for(i=0;i<n;i++)scanf("%d",d+i);
12: l=(L-1)/(n-1);
13: L=(L-1)%(n-1);
14: qsort(d,n,sizeof(int),CMP);
15: memset(f[0],63,sizeof f[0]);
16: f[0][0]=abs(1-d[0]);
17: for(i=1;i<n;i++)
18: { f[i&1][0]=f[!(i&1)][0]+abs(l*i+1-d[i]);
19: for(j=1;j<=L;j++)
20: f[i&1][j]=MIN(f[!(i&1)][j-1],f[!(i&1)][j])
21: +abs(l*i+1+j-d[i]);
22: }
23: printf("%d\n",f[!(n&1)][L]);
24: fclose(stdout);
25: return 0;
26: }