[破碎的状态] [-59] [APIO2016] Gap
如果考场上这题我做出来了,那么我就可以把bx2k推下去自己拿APIO的Au了......
感谢bx2k提供的算法....
后面那70分,我们可以观察
把它分成n-1块,每块内进行处理瞎搞搞...
具体来说就是每块内不可能是答案,所以只要套出所有的值就可以把所有答案算出来了
*因为答案至少是(ma-mi)/(n-1)
Update : 考虑到代码被waltz给Hack掉了....我补了一句话...
Update * : 考虑到代码又被waltz给Hack掉了....我又补了一句...
Update ** : 考虑到代码第三次被waltz给Hack掉了....我报警了...
第一版:
#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include"gap.h"
#include<math.h>
#include<string>
#include<time.h>
#include<bitset>
#include<vector>
#include<memory>
#include<utility>
#include<stdio.h>
#include<sstream>
#include<fstream>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
long long a[100005];
long long findGap(int t,int n)
{
if (t==1)
{
int i;
long long l=-1,r=1000000000000000001ll;
for (i=0;i+i<n;i++)
{
MinMax(l+1,r-1,&a[i],&a[n-i-1]);
l=a[i];
r=a[n-i-1];
}
long long ma=0;
for (i=0;i<n-1;i++)
{
ma=max(ma,a[i+1]-a[i]);
}
return ma;
}
else
{
int i;
long long mi,ma;
MinMax(0,1000000000000000000ll,&mi,&ma);
long long last=mi;
long long ans=(ma-mi-2)/(n-1);
int sum=0;
for (i=1;i<n;i++)
{
long long tmi,tma;
int temp=((ma-mi-2)%(n-1)*(i-1))/(n-1);
MinMax(mi+1+(ma-mi-2)/(n-1)*(i-1)+sum,(mi+1+(ma-mi-2)/(n-1)*i)+temp,&tmi,&tma);
sum=temp+1;
if (tmi==-1) continue;
ans=max(ans,tmi-last);
last=tma;
}
ans=max(ans,ma-last);
return ans;
}
return 0;
}
评论 (0)