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

【题解】



可以在读入问题难度的时候直接cnt[nandu]++;

然后从小到大枚举一下难度;

对于那些有该难度的题;

加入链表末尾;

每次询问答题者回答哪些问题的时候,直接从链表的头节点开始往后遍历一下链表就好;

(链表还有一个cnt域,表示有几道该难度的题);

如果cnt域变为0了,就把该节点删掉;所以需要一个前缀指针;



【完整代码】

#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;
const int MAXNUM = 1e5+10; struct node
{
int num,cnt;
node *nex;
}; int n,m;
int cnt[MAXNUM],total;
node *h,*p,*prep; int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(m);
rep1(i,1,n)
{
int x;
rei(x);
cnt[x]++;
}
h = new node;
h->nex = new node;
p = h->nex;
p->nex = NULL;
rep1(i,0,1e5)
{
if (cnt[i]>0)
{
p->num = i;
p->cnt = cnt[i];
p->nex = new node;
p = p->nex;
p->nex = NULL;
}
}
rep1(i,1,m)
{
prep = h;
p = h->nex;
rei(total);
rep1(j,1,total)
{
printf("%d ",p->num);
p->cnt--;
if (p->cnt==0)
{
prep->nex = p->nex;
p = p->nex;
}
else
{
prep = p;
p = p->nex;
}
}
puts("");
}
return 0;
}

【t056】智力问答(链表+计数排序做法)的更多相关文章

  1. 【t056】智力问答(multiset做法)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新年联欢会上,G.Sha负责组织智力问答节目.G.Sha建立了一个很大很大的超级题库,并衡量了每道题的 ...

  2. Codeforces 558E A Simple Task(计数排序+线段树优化)

    http://codeforces.com/problemset/problem/558/E Examples input 1 abacdabcda output 1 cbcaaaabdd input ...

  3. 一种O(n)时间复杂度的计数排序算法和Top N热词算法

    排序算法是研究非常广泛且超级经典的算法,主流排序算法的时间复杂度基本都在O(nlogn). 今天就介绍一种以hash表为基础的,时间复杂度能够达到O(n)的排序算法--计数排序: 同时基于它的思想,完 ...

  4. 计数排序(counting-sort)——算法导论(9)

    1. 比较排序算法的下界 (1) 比较排序     到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界.   ...

  5. 计数排序和桶排序(Java实现)

    目录 比较和非比较的区别 计数排序 计数排序适用数据范围 过程分析 桶排序 网络流传桶排序算法勘误 桶排序适用数据范围 过程分析 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比 ...

  6. CF 375B Maximum Submatrix 2[预处理 计数排序]

    B. Maximum Submatrix 2 time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  7. 计数排序-java

    今天看了一本书,书里有道题,题目很常见,排序,明了点说: 需求:输入:最多有n个正整数,每个数都小于n, n为107 ,没有重复的整数 输出:按升序排列 思路:假设有一组集合 {1,3,5,6,11, ...

  8. 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task

    E. A Simple Task Problem's Link: http://codeforces.com/problemset/problem/558/E Mean: 给定一个字符串,有q次操作, ...

  9. 计数排序算法——时间复杂度O(n+k)

    计数排序 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出.它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于 ...

随机推荐

  1. 【JZOJ4901】【NOIP2016提高A组集训第18场11.17】矩阵

    题目描述 他是一名普通的农电工,他以一颗无私奉献的爱岗敬业之心,刻苦钻研业务,以娴熟的技术.热情周到的服务赢得了广大客户的尊敬和赞美.他就是老百姓称为"李电"的李春来. 众所周知, ...

  2. 【JZOJ4894】【NOIP2016提高A组集训第16场11.15】SJR的直线

    题目描述 数据范围 解法 考虑逐次加入每一条直线. 对于当前已加入的直线集合L,现在要新加入一条直线l. 那么它产生的贡献,与平行线有关. 对于任意三条直线,如果其中任意两条平行,那么将不做贡献. 所 ...

  3. win10上修改docker的镜像文件存储位置

    记住:修改的是docker从服务器上拉下来的镜像文件存储位置(本地),是不是镜像源地址(服务器) 首先 win10下的docker有可视化操作界面和命令行操作,下载了docker-ce.exe双击后就 ...

  4. [转]GDB调试基础

    一.gdb常用命令: 命令 描述 backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或 ...

  5. 从 FastAdmin 看国内开源现状

    从 FastAdmin 看国内开源现状 在做 FastAdmin 之前看过太多的国内开源软件,很多没有建立起正反馈,最终而烂尾. 国内开源者有时候收到的是负反馈. 比如遇到问题埋怨开源作者,对开源作者 ...

  6. mysql中int、bigint、smallint 和 tinyint

    bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. int 从 ...

  7. MaxCompute 图计算用户手册(上)

    概要 ODPS GRAPH是一套面向迭代的图计算处理框架.图计算作业使用图进行建模,图由点(Vertex)和边(Edge)组成,点和边包含权值(Value),ODPS GRAPH支持下述图编辑操作: ...

  8. 爬虫:Selenium + PhantomJS

    更:Selenium特征过多(language/UserAgent/navigator/en-US/plugins),以Selenium打开的浏览器处于自测模式,很容易被检测出来,解决方法可选: 用m ...

  9. Redis源码解析:03字典

    字典是一种用于保存键值对(key value pair)的抽象数据结构.在字典中,一个键和一个值进行关联,就是所谓的键值对.字典中的每个键都是独一无二的,可以根据键查找.更新值,或者删除整个键值对等等 ...

  10. SpringBoot-provider-JPA Not a managed type 问题分析及解决办法

    spring boot jpa-java.lang.IllegalArgumentException: Not a managed type异常问题解决方法 JPA实体类没有被扫描到,导致这样的情况有 ...