RT
思路和题解都不大一样,我用f[i]表示了 当反转次数为i时的最小差值,f[i+1]一定是从f[i]转化过来,当f[i+1]与f[i]相等,即反转无效,就输出次数
感觉没错结果只有20pts
#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
int a[N],b[N],f[N];
int check(int aa,int bb)
{
int cc=aa,dd=bb;
if(aa<0) cc=-aa;
if(bb<0) dd=-bb;
if(cc>dd) return bb;
if(cc<=dd) return aa;
}
int main()
{
int n,ans=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
ans+=a[i]-b[i];
}
f[0]=ans;
for(int i=1;;i++)
{
for(int j=1;j<=n;j++)
{
f[i]=check(f[i-1]+2*(b[j]-a[j]),f[i-1]);
int t=b[j];
b[j]=a[j];
a[j]=t;
}
if(f[i]==f[i-1])
{
cout<<i-1<<" ";
exit(0);
}
}
return 0;
}