cf1733B

以第一次1与2之间的比赛入手,必定有一胜一负,也就是min{x,y}=0,max{x,y}>0

而比赛次数必定为maxn的倍数(因为有k个人赢了maxn次),所以(n-1)%maxn=0,不满足上述条件的x,y均没有解

而合法的胜者序列不能从1开始输出,因为1中间到第二局隔了一个2,所以从2开始枚举胜者

code

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6 int t,n,x,y,minn,maxn;
 7 void sol()
 8 {
 9   cin>>n>>x>>y;
10   minn=min(x,y); maxn=max(x,y);
11   if (minn!=0||maxn==0||(n-1)%maxn!=0) {
12     cout<<-1<<endl; return ;
13   }
14   for (int i=2;i<=n;i+=maxn) {
15     for (int j=1;j<=maxn;++j)
16       cout<<i<<" ";
17   }
18   cout<<endl;
19 }
20 int main()
21 {
22   cin>>t;
23   while (t--) sol();
24   return 0;
25 }

 

posted @ 2022-09-21 18:20  LyingFlat666  阅读(31)  评论(0编辑  收藏  举报