做的时候看n,m<=100,就next_permutation直接暴力了,但是超时了,以为不会超时呢。 看了题解才理解题目意思,做的时候真没怎么看懂。
参考:http://www.cnblogs.com/Zars19/p/7098483.html
#include <bits/stdc++.h>
using namespace std;
int n,m,l[105],a[105];
int num[105];
queue<int> s;
int main()
{
scanf("%d %d",&n,&m);
for(int i = 1; i <= m; ++i)
scanf("%d",&l[i]);
for(int i = 1; i < m; ++i)
{
int t = l[i+1];
while(t <= l[i]) t += n;
if(a[l[i]] && a[l[i]] != t-l[i])
{
printf("-1\n");
return 0;
}
if(!a[l[i]])
{
a[l[i]] = t-l[i];
num[a[l[i]]]++;
}
}
for(int i = 1; i <= n; ++i)
{
if(num[i] > 1)
{
printf("-1\n");
return 0;
}
else if(!num[i])
s.push(i);
}
for(int i = 1; i <= n; ++i)
{
if(!a[i]) a[i] = s.front(),s.pop();
printf("%d\n",a[i]);
}
return 0;
}