• 【Test】[20111003][字符串模拟+博弈论+组合+猥琐动归]


    【闲话】

    第一题: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位。分别为第一个问题和第二个问题的答案

    输入样例:

    52 13 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)then
    
     13:         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)then
    
     23:         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)then
    
     32:         begin
    
     33:           inc(MainBB);
    
     34:           dec(money,50);
    
     35:         end;
    
     36:     end;
    
     37:   Procedure FuB;
    
     38:     begin
    
     39:       if(FuBB<5)and(money>=25)then
    
     40:         begin
    
     41:           inc(FuBB);
    
     42:           dec(money,25);
    
     43:         end;
    
     44:     end;
    
     45:   Procedure Extra;
    
     46:     begin
    
     47:       case S[i+2] of
    
     48:         '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')then
    
     56:                   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) do
    
     69:       begin
    
     70:         if s[i]='B' then
    
     71:           begin
    
     72:             if s[i+2]='B' then
    
     73:               begin
    
     74:                 case s[i+1] of
    
     75:                   '6' : MainB;
    
     76:                   '7' : FuB;
    
     77:                 end;
    
     78:                 inc(i);
    
     79:               end else
    
     80:             if s[i+3]='B' then
    
     81:               begin
    
     82:                 case s[i+1] of
    
     83:                   '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 then
    
     94:       case s[i+1] of
    
     95:                   '6' : MainB;
    
     96:                   '7' : FuB;
    
     97:       end            else
    
     98:       case s[i+1] of
    
     99:                   '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 of
    
    107:       1 : write('B81');
    
    108:       2 : write('B82');
    
    109:     end;
    
    110:     case Shanguang of
    
    111:       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 do
    
     13:       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 then
    
     18:         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 do 
    
     22:       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: }
  • 相关阅读:
    关于MySQL数据库优化的部分整理
    PHP跨域form提交
    px、dp和sp,这些单位有什么区别?
    301和302 Http状态有啥区别?
    PHP HTTP请求
    php的http_build_query使用
    nginx ssi 模块
    MongoDB学习笔记(一) MongoDB介绍及安装(摘)
    Django Admin 录入中文错误解决办法
    关于python字符串连接的操作
  • 原文地址:https://www.cnblogs.com/Loongint/p/2198512.html
Copyright © 2020-2023  润新知