ZCMU-1862-zbj的狼人杀
2017-01-26 19:51
239 查看
1862: zbj的狼人杀
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 8 Solved: 5
[Submit][Status][Web
Board]
Description
这天zbj和小伙伴总共n个人出去玩狼人杀,玩的正开心的时候又来了一群人总共n个,硬是要跟他们一起玩,所以他们想了一个游戏规则准备赶走他们。规则是这样的,所有人坐在圆桌旁,从第一个人开始报数,数到第m个人,则这个人出局;然后从出局的人之后开始数数,再将数到的第m个人出局.....依次方法不断出局,直到最后只剩n个人,这时候,zbj希望剩下的n个人是他和他的小伙伴们,试问预先应该怎么安排座位,能使得他完成心愿?Input
多组数据,每组数据输入:人数n(<=100000)、步长m(<=32767);Output
对于每一组数据,输出2n个大写字母,‘A’表示zbj和他的小伙伴,‘B’表示外来的那群人,50个字母为一行,不允许出现空白字符。相邻数据间留有一空行。Sample Input
2 32 4
Sample Output
ABBABAAB
【解析】
其实这道题也是一道可以用vector来进行模拟,数到了m就删除,数到就删除,而到哪个位置其实就是(now+m-1)%a.size
a.size是现有的人数,减1是因为下标是从0开始的,a[0]是1。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; vector<int>a; int main() { int n,m,now,i,flag=0; while(~scanf("%d%d",&n,&m)) { now=0; if(flag==1)//每输出一组数据中间空一行 printf("\n"); flag=1; int b[150000]={0}; a.clear(); for(i=1;i<=2*n;i++)//a[0]是1 a.push_back(i); for(i=0;i<n;i++) { now=(now+m-1)%a.size(); b[a[now]]=1;//标记出队的编号是多少 a.erase(a.begin()+now); } for(i=1;i<=2*n;i++) { if(b[i]==0) printf("A"); else printf("B"); if(i%50==0)//50个字母了要换行 printf("\n"); } printf("\n"); } return 0; }
相关文章推荐
- ZCMU-1862: zbj的狼人杀
- ZCMU—1862
- ZCMU-1860-zbj的电梯间
- ZCMU-1861-zbj的a+b
- ZCMU-1863-zbj的长跑
- ZCMU-1853-zbj的游戏
- pku_1862 Stripies 解题报告
- hdu 1862 hdoj 1862
- POJ 1862 Stripies
- poj 1862
- POJ 1862 Stripies 贪心+优先队列
- hdu 1862 EXCEL排序
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- 9 POJ 1862 Stripies 简单贪心
- Num 9 : HDOJ: 题目1862 : 结构体排序
- zcmu_1671
- MYSQL ERROR 1862 (HY000): Your password has expired.
- 【BZOJ1056&&1862】【codevs1985】排名系统,Splay+trie树
- HDOJ 1862 EXCEL排序
- zcmu 1615: 找区间