ZZULI Oj--1819
2015-12-08 17:26
225 查看
1819: 加加加!(油)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 57 Solved: 35
SubmitStatusWeb
Board
Description
实验室的小D同学又开始玩游戏了,这次他的游戏貌似很高级的样子。首先他在一张纸上写下了一个数n,然后他在两个无差别的球上写上两个数分别是a和b,他把两个球放在一个黑色的袋子中,然后他会从袋子中随机取出来一个球,并将这个n改变成n和这个球上标记的数的和。是不是很简单!是不是很有意思!是不是很神奇!
(不是!)
好吧,这不是问题的所在,问题的所在是小d这个过程中n都有可能是些什么值。
Input
输入的第一行包含一个K,代表输入样例组数。每组样例只有一行,包含四个整数"n a b m",n,a,b的含义为题目描述中的含义,m代表小D随机从袋子中取球的次数。(0 <= n < 1000000,0 <= a < 100000,0 <= b < 100000, 0 <=m < 10)
Output
把所有可能出现的n按照升序输出(不允许重复)。注意只有两个连续的数中间才允许空格,结尾不允许有空格。Sample Input
31 1 1 1
4
2 3 2
5 100 102 1
Sample Output
1 24 6 7 8 9 10
5 105 107
解体思路:我用了队列,虽然感觉有点大材小用,但真的很方便
代码如下:
#include<stdio.h> #include<algorithm> #include<queue> using namespace std; int main(){ int k; long long n,a,b; int m; scanf("%d",&k); while(k--){ scanf("%lld%lld%lld%d",&n,&a,&b,&m); priority_queue<long long ,vector<long long >,greater<long long > >q[3]; q[0].push(n); q[2].push(n); int j,t,d; j=0;t=1; long long n1,n2; for(int i=1;i<=m;i++){ while(!q[j].empty()){ n1=q[j].top(); q[j].pop(); n2=n1+a; q[t].push(n2); q[2].push(n2); n2=n1+b; q[t].push(n2); q[2].push(n2); } d=j; j=t; t=d; } long long flag=-1; long long ans=0; while(!q[2].empty()){ a=q[2].top(); q[2].pop(); ans++; if(a!=flag){ if(ans>1)printf(" "); printf("%lld",a); flag=a; } } printf("\n"); } return 0; }
相关文章推荐
- ecshop后台编辑器替换成ueditor编辑器
- CSS实现三角形图标原理解析
- junit4 hibernate4 解决 LazyInitializationException 问题
- $(window).scroll不能在样式内写overflow属性
- JS原型和原型链
- 通过Annotation实现对程序的运行状态监听,简单实现
- python爬取网页时去除html标签(如nbsp)
- FireBug的基本使用
- js动态添加行和列
- Android开发笔记(十三)视图绘制的几个方法
- Oracle 热备份
- iOS 7.0以后隐藏状态栏的方法
- js
- $.ajax()方法详解
- (六)、nodejs中的express框架获取http参数
- java开发工具eclipse中@author怎么改
- Python 模版(四)
- eclipse中run cofigurations 里面 Arguments 的两种参数详解
- squid2.7安装与配置
- 关于团队文化的一些思考