大佬求助
查看原帖
大佬求助
146752
сbyybccbyybc楼主2020/5/16 10:20

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;
}
2020/5/16 10:20
加载中...