A - Card Stacking

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

Bessie is playing a card game with her N-1 (2 ≤ N ≤ 100) cow friends using a deck with K (N ≤ K ≤ 100,000; K is a multiple of N) cards. The deck contains M = K/N "good" cards and K-M "bad" cards. Bessie is the dealer and, naturally, wants to deal herself all of the "good" cards. She loves winning.

Her friends suspect that she will cheat, though, so they devise a dealing system in an attempt to prevent Bessie from cheating. They tell her to deal as follows:

1. Start by dealing the card on the top of the deck to the cow to her right

2. Every time she deals a card, she must place the next P (1 ≤ P ≤ 10) cards on the bottom of the deck; and

3. Continue dealing in this manner to each player sequentially in a counterclockwise manner

Bessie, desperate to win, asks you to help her figure out where she should put the "good" cards so that she gets all of them. Notationally, the top card is card #1, next card is #2, and so on.

Input

* Line 1: Three space-separated integers: NK, and P

Output

* Lines 1..M: Positions from top in ascending order in which Bessie should place "good" cards, such that when dealt, Bessie will obtain all good cards.

Sample Input

3 9 2

Sample Output

3
7
8
 一个模拟题,我想了一下就决定用队列来模拟发牌过程,事实证明也很顺利,只是不知为何,OJ会说我runtime error,我把数组什么的都尽量开大了,还是没办法,难道队列还能爆?这根据题目的数据,不可能啊。。后来我搜了一下博客,也有跟我思路完全一样的人,但是人家用JAVA写的,就过了。我就很奇怪,不过我自认为我的程序应该是没有问题了。
 
过了两天,因为正好又碰到一个runtime error的题目,这次我找到我代码的BUG是发现有个地方会引起无限循环从而使数组爆掉,改好后就AC了,我再想起这个题目,于是今晚回过头来改一下,发现只要在队列中,判断依据 if(sum>=k/n) break;,也就是说,只要找到了题目要求的k/n个最好牌,就直接退出队列模拟。。。然后再提交,就AC了。。于是乎,我终于找到出问题的地方了,就是在模拟里面,每次while(!q.empty())循环里面出现了超过2次q.pop(),也就是说模拟到最后的牌,其实q队列已经空了,但是还是会继续访问下去,这样就是问题所在,果不其然,我拿之前错的代码,改了一个新的地方,在循环体里面还判断一下队列是否为空。。果不其然就A掉了
 
之前还在骂这个题目,为这个一个小BUG弄的时间比写代码的时间还长。。还是不够老练啊。。本来 if(sum>=k/n) break;这种代码明显可以优化时间(AC了几次发现这句话确实为我节省了几十ms) 我在第一次写的时候就应该写上的。。还至于到了最后不仅没有任何优化,还因为这样的小细节弄出自己半天都想不出来的bug。谨以为记。
  
 
顺便吐槽一下,POJ上没说是多组数据的样子啊。。怎么要用到while(scanf()!=EOF)?
代码自认为用队列用得挺好。
 
#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
int ans[];
int main()
{
int n,k,p;
while (scanf("%d%d%d",&n,&k,&p)!=EOF){
queue<int> q;
while (!q.empty())
q.pop();
for (int i=;i<=k;i++)
q.push(i);
int cur=;
int sum=;
while (!q.empty()) //模拟发牌过程,发到直至队列里没有牌
{
if (cur%n==){
ans[sum]=q.front();
sum++;
}
if (sum>=k/n) break;
q.pop();
cur++;
for (int j=;j<p;j++)
{
int a=q.front();
q.pop();
q.push(a);
}
}
sort(ans,ans+sum);
for (int w=;w<sum;w++)
printf("%d\n",ans[w]);
}
return ;
}

POJ-3629 模拟的更多相关文章

  1. POJ 3629 队列模拟

    听说STL会卡T 然后我就试了一发 哈哈哈哈哈哈哈哈哈哈 1000ms卡时过的 这很值得我写一发题解了 哈哈哈哈哈哈哈哈哈哈哈哈 //By SiriusRen #include <queue&g ...

  2. POJ 1016 模拟字符串

    Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20396   Accepted: 68 ...

  3. POJ 1208 模拟

    2017-08-28 15:07:16 writer:pprp 好开心,这道题本来在集训的时候做了很长很长时间,但是还是没有做出来,但是这次的话,只花了两个小时就做出来了 好开心,这次采用的是仔细分析 ...

  4. POJ - 3087 模拟 [kuangbin带你飞]专题一

    模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...

  5. Shuffle'm Up POJ - 3087(模拟)

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15249   Accepted: 6962 Des ...

  6. poj 1379 模拟退火法

    /* 模拟退火法: 找到一些随机点,从这些点出发,随机的方向坐标向外搜索: 最后找到这些随机点的最大值: 坑://if(xx>-eps&&xx<x+eps&& ...

  7. POJ 1471 模拟?

    题意:求最大无坏点三角形 思路: 模拟? (为什么我模拟过了...) 有人用 DP,有人用 搜索... // by SiriusRen #include <cstdio> #include ...

  8. POJ 1951 模拟

    思路: 坑爹模拟毁我一生 给两组数据: 输入: YOURE TRAVELING THROUGH ANOTHER DIMENSION A DIMENSION NOT OF SIGHT. 输出: YR T ...

  9. POJ 2141 模拟

    思路:字符串解密 啥都告诉你了 模拟就好 //By SiriusRen #include <cstdio> #include <cstring> using namespace ...

  10. POJ 2459 模拟

    题意: 思路: 按照题意模拟即可 //By SiriusRen #include <cstdio> using namespace std; int c,f1,f2,d,xx,yy,vis ...

随机推荐

  1. k-近邻算法的优缺点及拓展思考

    //2019.08.03晚#k-近邻算法的拓展思考与总结1.k-近邻算法是一种非常典型的分类监督学习算法,它可以解决多分类的问题:另外,它的整体思想简单,效果强大.它也可以用来解决回归问题,使用的库函 ...

  2. Vue中 onmouseenter,onmouseleave,onmouseover,onmouseout的区别

    今天在学Vue视频的时候,提到了这四个触发事件,我就想做下笔记: 1.onmouseenter和onmouseleave是一组:当鼠标进入指定区域的时候触发,但是不支持冒泡,进入或者离开子组件都不触发 ...

  3. python2学习------基础语法5(文件操作)

    1.文件内容读取 a.txt teestttttttttttttt teestttttttttttttt teestttttttttttttt teestttttttttttttt teesttttt ...

  4. vue axios 数据请求实现

    1.安装nginx npm install axios --save-dev cnpm install axios --save-dev 使用淘宝镜像 保存依赖文件到本地 装好了.packjson.j ...

  5. POJ1471 Tree/洛谷P4178 Tree

    Tree P4178 Tree 点分治板子. 点分治就是直接找树的重心进行暴力计算,每次树的深度不会超过子树深度的\(\frac{1}{2}\),计算完就消除影响,找下一个重心. 所以伪代码: voi ...

  6. Zabbix WebUI 配置监控Zabbix Agent

    Zabbix WebUI 配置监控Zabbix Agent 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署zabbix服务 1>.部署zabbix server 和z ...

  7. GoJS实例2

    复制如下内容保存到空白的.html文件中,用浏览器打开即可查看效果 <!DOCTYPE html> <html> <head> <meta name=&quo ...

  8. 玩个JAVA爬虫,没想玩大

    想玩个爬虫,爬些数据玩玩,不成想把自己玩“进去”了 想爬这个新浪的股票 大额交易页面 本以为用 HttpClient 直接爬链接,结果发现这个页面中,翻页数据压根就是动态赋值的,根本没有,那我根本无法 ...

  9. maven详解之 pom.xml 解释

    <project>:pom.xml的根标签,一个maven项目用一对<peoject></project>标签包裹. <modelVersion>4.0 ...

  10. 吴裕雄--天生自然java开发常用类库学习笔记:线程常用的操作方法

    class MyThread implements Runnable{ // 实现Runnable接口 public void run(){ // 覆写run()方法 for(int i=0;i< ...