您的位置:首页 > 其它

渣渣ACM日记——278-排队(NYOJ)

2015-06-21 11:42 190 查看

排队

时间限制:3000 ms | 内存限制:65535 KB难度:1描述周末了,软件ACM的队员准备玩玩游戏,娱乐一下,CY想了一个好主意,所有队员站成一个圈,从1开始报数,凡是报出指定数字的人要出列,有人出列后,下个人重新从1开始报数。最后一位“幸存者”要给大家表演个节目。由于队员正在不断的壮大,C小加又想知道他是否需要准备表演,请你设计个程序,帮他确定他是否是“幸存者”。输入第一行是n,有n次游戏,第二行是m,x,表示某次游戏有m个人,指定被请出列的数字为x。其中n<100,m<1000输出最后幸存的那位的原来的号码样例输入
2
10 5
6 4
样例输出
3
5
//AC代码  模拟  效率低 不科学
#include <iostream>#include <queue>using namespace std;int main(){queue<int> q;int t,i,m,x;cin>>t;while(t--){cin>>m>>x;for(i=1;i<=m;i++){q.push(i);}int tmp;while(q.size()!=1){for(i=1;i<x;i++){tmp=q.front();q.pop();q.push(tmp);}q.pop();}cout<<q.front()<<endl;q.pop();}return 0;}
//查了资料 这是关于约瑟夫环问题 有递推公式 f[0]=0; f[i]=(f[i-1]+x)%i;[/code]
//AC代码:
#include <iostream>using namespace std;int main(){int t,i,m,x;cin>>t;int f[1001];while(t--){cin>>m>>x;f[0]=0;for(i=1;i<=m;i++){f[i]=(f[i-1]+x)%i;}cout<<f[m]+1<<endl;}return 0;}
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: