我的对拍不知道为什么很慢很慢。平均 1 秒只有 1 组数据。以下是我的拍子,不知道为什么那么慢,求大佬帮忙看看。
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int a, id=0;
int main()
{
while (1)
{
printf("%d:", id);
system("random.exe");
// Sleep(100);
system("ac.exe");
// Sleep(100);
system("baoli.exe");
// Sleep(100);
if (system("fc 1.out 1.ans")) break;
puts(""), id++;
}
printf("Wa on:%d", id);
cin>>a;
return 0;
}
另外,附上其余程序的代码。
random:
#include <bits/stdc++.h>
using namespace std;
int n, L, R;
int rd(int L, int R)
{
return rand()%(R-L+1)+L;
}
int main()
{
freopen("1.in", "w", stdout);
srand(time(NULL));
n=5, L=1, R=10;
printf("%d\n", n);
for (int i=1; i<=n; i++) printf("%d ", rd(L, R));
puts("");
for (int i=1; i<=n; i++) printf("%d ", rd(L, R));
return 0;
}
baoli:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000005;
int n, a[N], b[N], s[N], f[N], f2[N], g[N], g2[N], res[N], ans;
signed main()
{
freopen("1.in", "r", stdin);
freopen("1.out", "w", stdout);
scanf("%lld", &n);
for (int i=1; i<=n; i++) scanf("%lld", &a[i]);
for (int i=1; i<=n; i++) scanf("%lld", &b[i]), s[i]=s[i-1]+b[i];
for (int i=1; i<=n; i++)
{
int val=a[i]-b[i];
f[i]=val, f2[i]=i;
if (f[i-1]+val>f[i]) f[i]=f[i-1]+val, f2[i]=f2[i-1];
}
for (int i=n; i>=1; i--)
{
int val=a[i]-b[i];
g[i]=val, g2[i]=i;
if (g[i+1]+val>g[i]) g[i]=g[i+1]+val, g2[i]=g2[i+1];
}
for (int i=1; i<=n; i++)
{
res[i]=max(f[i], g[i]);
res[i]=max(res[i], f[i]+g[i]-(a[i]-b[i])-min(s[i]-s[f2[i]], s[g2[i]-1]-s[i-1]));
}
for (int i=1; i<=n; i++) ans=(ans^res[i]);
printf("%lld", ans);
return 0;
}
/*
5
4 4 4 7 9
3 4 1 3 4
10
*/
ac:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
long long n,a[N],b[N],suml[N],sumr[N],sumlr[N],sumrl[N],maxl[N],maxr[N],maxlr[N],maxrl[N],ans;
int main(){
freopen("1.in", "r", stdin);
freopen("1.ans", "w", stdout);
// ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n,maxl[0]=maxlr[0]=maxr[n+1]=maxrl[n+1]=-1e16;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i],a[i]-=b[i];
for(int i=1;i<=n;i++)sumr[i]=sumr[i-1]+a[i],sumrl[i]=sumrl[i-1]+a[i]-b[i-1];
for(int i=n;i>=1;i--)suml[i]=suml[i+1]+a[i],sumlr[i]=sumlr[i+1]+a[i]-b[i+1];
for(int i=1;i<=n;i++)maxl[i]=max(maxl[i-1],suml[i]),maxlr[i]=max(maxlr[i-1],sumlr[i]);
for(int i=n;i>=1;i--)maxr[i]=max(maxr[i+1],sumr[i]),maxrl[i]=max(maxrl[i+1],sumrl[i]);
for(int i=1;i<=n;i++){
long long l=max(0ll,maxrl[i]-sumrl[i])+maxl[i]-suml[i]+a[i];
long long r=max(0ll,maxlr[i]-sumlr[i])+maxr[i]-sumr[i]+a[i];
ans^=max(l,r);
}
cout<<ans;
return 0;
}