【t056】智力问答(multiset做法)
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
新年联欢会上,G.Sha负责组织智力问答节目。G.Sha建立了一个很大很大的超级题库,并衡量了每道题的难度wi。由于不可以让选手
一上场就被绝顶难题撂倒,所以难度必须循序渐进,从简到繁。
G.Sha制定了一套具体的抽题规则。首先,每位选手的第1道题一定是当前题库中最简单的。每位选手的下一道题,一定是题库中(1
)比刚刚答过的题严格地更难,(2)难度尽可能低的题。当然,每道题使用一遍就从题库中删掉。(可以参考样例数据)
G.Sha刚开完联欢会很累,所以他提供了抽题程序的日志,希望你能重现答题的过程。
简单起见,你只需要依次输出每位选手都答了哪些难度的题就可以了。
【数据规模】
40%的数据中,m≤50, n≤1000。
100%的数据中,m≤1000, n≤100000。
测试数据保证 ,即比赛中使用的题目,不仅比题库少,并且是远远的少。
测试数据保证每位选手都不会出现无题可选的情况。
【提示】
本题数据严格而全面,请注意优化算法,谨防超时。
【输入格式】
输入文件 quiz.in 包含3 行。
第 1 行,整数 n, m。代表题库最初的题目数 n,和选手数 m。
第 2 行,n个整数 wi,代表题目的难度,无序,0≤wi≤100000。
第 3 行,m个整数 ai,代表依次每位选手作答的题目数量。
【输出格式】
输出文件quiz.out包含n行。
第i行,每行ai个整数,代表选手i回答的每道题目的难度。
选手和每位选手的题目均按比赛时间的推移有序。
说明:游戏开始前的题库是{30, 1, 7, 3, 1, 14, 8, 20, 2, 1, 999, 2}。
选手1,依次作答了1,2,3,7四道题。作答后题库剩余{30,1,14,8,20,1,999,2}。
选手2,依次作答了1, 2两道题。作答后题库剩余{30, 14, 8, 20, 1, 999}。
选手3,依次作答了1, 8, 14三道题。作答后题库剩余{30, 20, 999}。
选手4,依次作答了20一道题,作答后题库剩余{30, 999}。
可以注意到,选手1~3都答了难度为1的题。这是因为难度1的题有3道,而对于每位选手来说难度都是递增的,一位选手不可能连续答
同样难度的题。
同理,选手1~2都答了难度为2的题。
Sample Input
12 4
30 1 7 3 1 14 8 20 2 1 999 2
4 2 3 1
Sample Output
1 2 3 7
1 2
1 8 14
20
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t056
【题解】
把n个问题加入multiset题库->int类型里面就好;
每个选手按照要求用upper_bound找比上一次大的数字就好;
简直是模板题有木有。
输出有点坑;每行最后一个数字后面有空格;
【完整代码】
#include <cstdio>
#include <cmath>
#include <set>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXM = 1000+100;
multiset <int> tiku;
int n,m;
int a[MAXM];
int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(m);
rep1(i,1,n)
{
int x;
rei(x);
tiku.insert(x);
}
rep1(i,1,m)
rei(a[i]);
rep1(i,1,m)
{
int now = -1;
rep1(j,1,a[i])
{
__typeof(tiku.begin()) t = tiku.upper_bound(now);
now = (*t);
printf("%d ",now);
tiku.erase(t);
}
puts("");
}
return 0;
}
最新文章
- 【HDU 5733】tetrahedron
- perl常用代码
- .Net使用CDO发送邮件,需安装注册的组件
- Linux C SMTP POP3 极简陋邮件客户端
- error “base class has incomplete type”
- Amoeba实现mysql主从读写分离
- 使用 Java 配置进行 Spring bean 管理--转
- clistctrl 虚拟列表
- Linux多线程服务端编程:使用muduo C++网络库
- 关于微软公有云Azure会计标准
- activemq的案例
- sublime text3汉化
- 基于CBOW网络手动实现面向中文语料的word2vec
- Expo大作战(二十四)--expo sdk api之Accelerometer
- 如何在Linux系统中安装VMware
- Tomcat------如何配置域名和80端口
- (转)C语言中scanf函数与空格回车
- C# 终极基类Object介绍
- Hive学习之路 (二)Hive安装
- 如何设置电脑的固定IP地址
热门文章
- 模板内置函数(HTML)
- bzoj1800 飞行棋
- Linux配置redis开机启动(CentOS 7)
- 洛谷 P3768 简单的数学题 (莫比乌斯反演)
- Inventor安装失败怎样卸载重新安装Inventor,解决Inventor安装失败的方法总结
- 如何用django框架完整的写一个项目
- POLARDB v2.0 技术解读
- LeetCode74 Search a 2D Matrix
- vs code python保存时pylint提示";Unable to import &#39;flask&#39;";
- @codechef - MXMN@ Maximum and Minimum