代码
2023-01-13 16:32:07
发布于:山东
65阅读
0回复
0点赞
数组范围不让贴1e7啊
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+10;
int arr[N],x[N],y[N],f[N],n,ans=(1<<30);
inline int read()
{
char c=getchar();
int x=0,s=1;
while(c<'0' or c>'9')
{
if(c=='-')
{
s=-1;
}
c=getchar();
}
while(c>='0' and c<='9')
{
x=x*10+c-'0';
c=getchar();
}
return x*s;
}
void write(int x)
{
if(x<0)
{
putchar('-'),x=-x;
}
if(x>9)
{
write(x/10);
}
putchar(x%10+'0');
return;
}
signed main()
{
n=read();
for(register int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
for(register int i=1;i<=n;i++)
{
if(x[x[i]]!=i and y[x[i]]!=i or x[y[i]]!=i and y[y[i]]!=i)
{
write(-1);
return 0;
}
}
arr[1]=1;
arr[2]=x[1];
for(register int i=2;i<n;i++)
{
if(arr[i-1]==x[arr[i]])
{
arr[i+1]=y[arr[i]];
}
else if(arr[i-1]==y[arr[i]])
{
arr[i+1]=x[arr[i]];
}
}
for(register int i=1;i<=n;i++)
{
f[(i-arr[i]+n)%n]++;
}
for(register int i=0;i<n;i++)
{
ans=min(ans,n-f[i]);
}
for(register int i=0;i<n;i++)
{
f[i]=arr[i+1]=0;
}
arr[1]=1;
arr[2]=y[1];
for(register int i=2;i<n;i++)
{
if(arr[i-1]==x[arr[i]])
{
arr[i+1]=y[arr[i]];
}
else if(arr[i-1]==y[arr[i]])
{
arr[i+1]=x[arr[i]];
}
}
for(register int i=n;i>=1;i--)
{
f[(i-arr[i]+n)%n]++;
}
for(register int i=0;i<n;i++)
{
ans=min(ans,n-f[i]);
}
write(ans);
return 0;
}
全部评论 1
不让用1e7好像是因为由于精度丢失还是啥的所以1e7直接填会成为一个浮点数,不可能有小数个下标吧(
2024-09-03 来自 安徽
0
有帮助,赞一个