zoukankan      html  css  js  c++  java
  • 计蒜之道初赛第二场第一题

    第一次做这种比赛,第一题花了一小时,第二题做了半小时就交枪了,太难了,下次继续努力

    放下第一题的代码吧!

    先看原题:原题地址:https://nanti.jisuanke.com/t/15503

    百度年会盛况空前,每个部门的年会活动也是非常有趣。某部门的年会中进行了一个有趣的游戏:一张方桌上有四边,每边可以坐一人,每人面前摆放一排长方形木块。我们一次给四边标号,分别为玩家 1、2、3、4(详见下图)。

    玩家 1 掷出两个骰子,其点数分别为 x,y(1≤x,y≤6),则从玩家 1 开始按照逆时针(玩家 1、2、3、4)的顺序,数到 x+y时不妨记为玩家 c,那么从玩家 c 面前顺时针方向第 min(x,y)+1 个木块开始,按照玩家 1、2、3、4 的顺序,每位玩家依次拿走连续的两个木块,循环三次,也就是说每位玩家最终应该有 6 个木块。

    注意:按照顺时针方向拿走木块,任何时候(包括拿第一个木块的时候),如果某一边的木块不够拿了,则继续拿顺时针方向下一个玩家的第一个木块。

    举个例子,玩家 1 掷骰子点数为 3,5,那么应该从玩家 4 顺时针第 4 块木块开始。依次用蓝色、绿色、红色、紫色分别代表玩家 1、2、3、4 拿到的木块,如下图所示:

     

    分别用num_4num​1​​,num​2​​,num​3​​,num​4​​ 表示玩家1/2/3/4 面前木块的数量。在这些木块中有两个 幸运木块,它们 在同一个玩家面前且相邻。如果 同时拿走这两个幸运木块,就可以拿走年会的终极大奖。

    现在轮到 玩家 1 掷骰子,他希望拿走终极大奖,你能帮他算出一共有多少种掷骰子的组合能使得 玩家 1 赢得终极大奖么?不考虑骰子之间的顺序,即 3,4 和 4,3 被认为是同一种骰子组合。

    输入格式

    第一行输入num​1​​,num​2​​,num​3​​,num​4​​ ,(1≤numi​​<52,)∑​i=1​4​​numi​​=54),依次表示 1/2/3/4 玩家面前摆放的木块数。第二行输入两个整数 k(1≤k≤4), d(1≤d<numk​​),表示玩家 kk 面前顺时针数第 d和 d+1 位置上的木块是幸运木块(从 1 开始计数)。

    输出格式

    输出一行,表示 玩家 1 能够赢得终极大奖的骰子组合的数目。

    样例说明

    对于样例,用红色标识出了幸运木块的位置。对应的玩家 1 掷骰子的方案有三种,分别是 (1, 1),(1, 5),(3, 6)。

     

    样例输入

    10 14 15 15

    1 4

    样例输出

    3

     

    #include<stdio.h>  
    struct players{  
        int num;  
    }player[4];  
    int main (){  
        scanf("%d%d%d%d",&player[0].num,&player[1].num,&player[2].num,&player[3].num);  
        int k;
        int d;
        scanf("%d",&k); 
        scanf("%d",&d); 
         
        int ret = 0;
    
        int sum=0;  
        for (int i=1;i<=6;i++){  
            for (int j=i;j<=6;j++){  
                int kk;
                if((i+j)%4 == 0) kk=4;
                else kk = (i+j)%4;
                int tem = 0;
                while(kk != k){
                    tem=tem+player[kk-1].num;
                    if(kk==4)kk=3;
                    else if(kk==3)kk =2;
                    else if(kk==2)kk =1;
                    else if(kk==1)kk =4;
                }
                tem = tem+d;
                tem = tem-i;
                if(tem<22){
                    if(tem == 1){
                        ++ret;
                    }
                    else if(tem == 9){
                        ++ret;
                    }
                    else if(tem == 17){
                        ++ret;
                    }
                }
            }  
        }  
        printf ("%d
    ",ret);  
        return 0;  
    }   
  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/jhmu0613/p/6886172.html
Copyright © 2011-2022 走看看