圆桌问题

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             else46             {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                 else60                 {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("\n");85         }86         printf("\n");printf("\n");87     }88     return 0;89 }
 

最新文章

  1. 我和linux的第二十二天
  2. 安装最新版本的PHPUnit后,不能使用
  3. [Java] Java解析XML格式Response后组装成Map
  4. [书]WALL&#183;E、龙与地下铁、中国美丽的故事、故事新编、四十自述、书虫、人工智能、大话数据结构
  5. eclipse 安装git
  6. android模拟器(genymotion)+appium+python 框架执行基本原理(目前公司自己写的)
  7. D2 前端技术论坛总结(下)
  8. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》勘误收集
  9. C# winform 实现 qq 在屏幕边缘 自动隐藏 鼠标移过去 移上去 又自动显示
  10. CODEFORCES掉RATING记 #4
  11. C#串口通信遇到的坑
  12. table中表头不动,表体产生滚动条
  13. ATM+购物车商城
  14. 【转】TCP三次握手和四次挥手全过程及为什么要三次握手解答
  15. 项目复审-Bata阶段
  16. 网页制作中最有用的免费Ajax和JavaScript代码库
  17. AndroidManifest.xml权限设置
  18. 3PC
  19. filter入门
  20. eclipse配置storm1.1.0开发环境并本地跑起来

热门文章

  1. 汇编LED实验
  2. 使用Rainbond实现离线环境软件交付
  3. C#gridview颜色提示
  4. A Child&#39;s History of England.10
  5. Zookeeper之创建组,加入组,列出组成员和删除组
  6. oracle中的控制语句
  7. Java实现单链表的增删查改及逆置打印
  8. centos 7 重新获取IP地址
  9. ssm动态查询向前台传json
  10. Django REST framework完全入门