• 圆桌问题(hdu4841)


    圆桌问题

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 1038    Accepted Submission(s): 446


    Problem Description
    圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
     

    Input
    多组数据,每组数据输入:好人和坏人的人数n(<=32767)、步长m(<=32767);
     

    Output
    对于每一组数据,输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。
     

    Sample Input

    2 3

         2 4 

     

    Sample Output
    GBBG

    BGGB

    模拟一下就可以了,删除队列中的元素用vector。

    先出来的p个人都是B.

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<string.h>
     5 #include<math.h>
     6 #include<vector>
     7 #include<queue>
     8 #include<stack>
     9 using namespace std;
    10 vector<int>my;
    11 int a[80000];
    12 char paidui[80000];
    13 int main(void)
    14 {
    15     int n,i,j,k,p,q;
    16     int cnt;
    17     int id;
    18     int ans;
    19     int uu;
    20     while(scanf("%d %d",&p,&q)!=EOF)
    21     {
    22         cnt=0;
    23         ans=1;
    24         memset(paidui,0,sizeof(paidui));
    25         my.clear();
    26         int countt=2*p;
    27         for(i=1; i<=2*p; i++)
    28         {
    29             my.push_back(i);
    30         }
    31         int biao=q%(2*p);//biao表示删除的下标
    32         uu=1;//表示在某次操作前要删除的元素,
    33         while(cnt<p)
    34         {
    35             if(biao==0)
    36             {
    37                 biao=countt;
    38                 countt-=uu;
    39                 uu=0;
    40                 a[cnt++]=my[biao-1];
    41                 my.erase(my.end()-1);
    42                 biao=q%countt;
    43                 uu++;
    44             }
    45             else
    46             {
    47                 if(biao+q>countt)
    48                 {
    49                     int vc=q;
    50                     vc-=(countt-biao);
    51                     a[cnt++]=my[biao-uu];
    52                     my.erase(my.begin()+biao-uu);
    53                     countt-=uu;
    54                     biao=vc%countt;
    55                     uu=0;
    56                     uu++;
    57 
    58                 }
    59                 else
    60                 {
    61                     a[cnt++]=my[biao-uu];
    62                     my.erase(my.begin()+biao-uu);
    63                     biao=(biao+q)%countt;
    64                     uu++;
    65                 }
    66             }
    67 
    68         }
    69         for(i=0; i<cnt; i++)
    70         {
    71             paidui[a[i]]='B';
    72         }
    73         for(i=1; i<=2*p; i++)
    74         {
    75             if(!paidui[i])
    76             {
    77                 paidui[i]='G';
    78             }
    79         }
    80         for(i=1; i<=2*p; i++)
    81         {
    82             printf("%c",paidui[i]);
    83             if(i%50==0)
    84                 printf(" ");
    85         }
    86         printf(" ");printf(" ");
    87     }
    88     return 0;
    89 }
     
    油!油!you@
  • 相关阅读:
    jquery 一键复制文本到剪切板
    C#根据当前时间获取周,月,季度,年度等时间段的起止时间
    Asp.Net : Page.RegisterStartupScript及 不执行的原因
    mysql 查询当天、本周,本月,上一个月的数据
    ASP.NET: Cookie会话丢失,Session超时配置
    SQL :“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误
    JS:Math 对象方法
    ASP.NET上传文件到远程服务器(HttpWebRequest)
    Javascript 使用postMessage对iframe跨域传值或通信
    C#中out和ref之间的区别
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5184162.html
Copyright © 2020-2023  润新知