谢谢了
by 2200w @ 2015-02-24 16:14:31
谢0v0
by icecathy @ 2015-08-01 21:14:53
已改
by yyy2015c01 @ 2016-03-13 23:13:35
.
by 孤河 @ 2016-08-16 10:35:38
十分感谢您
by disabled @ 2016-11-04 20:41:00
```cpp
#include<cstdio>
#define MAXN 50001
int a[MAXN], b[MAXN];
int s[MAXN], cnt1[MAXN], cnt2[MAXN],ans;
int i,j,n;
int main()
{
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d%d",&a[i],&b[i]);
s[1]=1; s[n]=a[1]; s[2]=b[1];
for (i=3; i<n; i++)
if (a[s[i-1]]==s[i-2]) s[i]=b[s[i-1]];
else s[i]=a[s[i-1]];
for (i=1; i<=n; i++)
{
int t1=i+1, t2=i-1;
if (t1>n) t1=1;
if (t2<1) t2=n;
if ((s[t1]!=a[s[i]] || s[t2]!=b[s[i]]) && (s[t2]!=a[s[i]] || s[t1]!=b[s[i]]))
{
printf("-1");
return 0;
}
}
for (i=1; i<=n; i++)
{
cnt1[(s[i]-i+n)%n]++;
cnt2[(s[i]+i-1)%n]++;
}
for (i=0; i<n; i++) //注意注意,%n后存放的地址为0..n-1。否则会爆第10个点
{
if (ans<cnt1[i]) ans=cnt1[i];
if (ans<cnt2[i]) ans=cnt2[i];
}
printf("%d",n-ans);
return 0;
}
```
by 3505515693qq @ 2016-12-17 18:47:46