做题链接:abc
问题陈述
N人、1人、2人、……人、N人正在玩轮盘赌。一次轮盘赌的结果是从0到36的37个整数中的一个。对于每个i=1,2,…,N,i人在37个可能结果中的Ci个下了注:Ai,1,Ai,2,…,Ai,Ci.
转盘已经转动,结果是X。打印所有投注在X上最少的人的号码,按**由小到大的顺序排列。
更正式地说,打印所有在1和N之间的整数i,这些整数满足以下两个条件,按升序:
请注意,可能没有要打印的数字(见示例输入 2)。
限制因素
输入
输入内容由标准输入法提供,格式如下
N C1 A1,1 A1,2 …… A1,C1 C2 A2,1 A2,2 …… A2,C2 ⋮⋮ CN AN,1 AN,2 …… AN,CN X
输出
设 B1,B2,…,BK是按升序打印的数字序列。使用以下格式,在第一行打印要打印的数字计数 K,在第二行打印用空格分隔的 B1,B2,…,BK:
K B1 B2 …… BK
输入样本 1
4
3
7 19 20
4
4 19 24 0
2
26 10
3
19 31 24
19
样本输出 1
2
1 4
转盘已经转动,结果是19。投注19的人有1、2和4,他们投注的次数分别是3、4和3。因此,在投注19的人中,投注最少的是1和4。
输入样本 2
3
1
1
1
2
1
3
0
输出示例 2
0
转盘已经转动,结果是0,但没有人投注0,所以没有数字要打印。
代码
// Problem: B - Roulette
// Contest: AtCoder - AtCoder Beginner Contest 314
// URL: https://atcoder.jp/contests/abc314/tasks/abc314_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include
using namespace std;
typedef long long ll;
typedef pair pii;
const int N = 110;
int n;
int a,b,c;
int main(){
cin>>n;
vector v[40];
for(int i=0;i>c;
for(int j=0;j>a;
v[a].push_back({c,i});
}
}
for(int i=0;i<=36;i++){
sort(v[i].begin(),v[i].end());
}
int x;
cin>>x;
if(v[x].size()==0){
cout<<"0\n";
return 0;
}
int minv=v[x][0].first;
vector ve;
for(int i=0;i