CF303A 题解
大水题。
思路
首先肯定有 Special Judge(?) 不然似乎没法做。
先考虑一下简单的情况,首先考虑前两个数,最简单的情况当然是两数相等啦,所以之接从 $0 \sim n$ 输出就行了。
之后来考虑第 $3$ 个数是什么。
先拿第一组样例举例,前两行依次应为:
0 1 2 3 4
0 1 2 3 4
先看第一组:
0
0
这个明显是 $0$。
第二组为:
1
1
$1+1$ 还没达到 $5$ 因此答案为 $1+1=2$。
第三组为:
2
2
$2+2$ 也没达到 $5$ 因此答案为 $2+2=4$。
之后是第四组:
3
3
和超过了 $5$ 先不管取余的事, $3+3=6$。
前几组答案为 $0,2,4,6$。
是不是看出规律了?
很明显,就是 $0 \times 2,1 \times 2,2 \times 2,3\times 2$,然后再对 $n$ 求余就可以。
再来看看无解的情况,来看看第二组样例。
还是一样的,前几组答案为:
0 1
0 1
直接看第二组,$1+1=2,2 \bmod 2=0$。
可见如果 $n$ 为偶数则无解。
那这道题就快乐的写完啦!
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n%2==0){
cout<<-1;
return 0;
}
for(int i=0;i<n;i++) cout<<i<<" ";
cout<<endl;
for(int i=0;i<n;i++) cout<<i<<" ";
cout<<endl;
for(int i=0;i<n;i++) cout<<i*2%n<<" ";
return 0;
}