poj3629 Card Stacking

来源:互联网 发布:linux mv到当前目录 编辑:程序博客网 时间:2024/06/15 02:02

题目链接:http://poj.org/problem?id=3629
题意:在桌子上有k张牌,牌面分别是1~k,然后有k/n张好牌,每次拿最开始那一张牌,判断是你拿的第几张排,如果刚好是张好牌就把这张牌那走,然后把开始这p张牌放在最后面,直至k/n张好牌全部拿完为止,让你升序输出这k/n张牌的牌面
解析:用队列直接模拟

#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <queue>#include <cmath>#include <map>using namespace std;const int maxn = 1e5+100;const int inf = 0x7ffffff;int ans[maxn];int main(void){    int n,k,p;    scanf("%d %d %d",&n,&k,&p);    queue<int>q;    for(int i=1;i<=k;i++)        q.push(i);    int cnt = 1,tt = 0;    while(!q.empty())    {        if(cnt%n==0)        {            ans[tt++] = q.front();            if(tt == n/k)                break;        }        cnt++;        q.pop();        for(int j=0;j<p;j++)        {            int tmp = q.front();            q.push(tmp);            q.pop();        }    }    sort(ans,ans+tt);    for(int i=0;i<tt;i++)        printf("%d\n",ans[i]);    return 0;}
0 0
原创粉丝点击