神秘。样例2本地+洛谷IDE均输出13 0,而交上去显示输出了什么
13 4
1 1
1 1
3 3
3 3
从没有遇到过。语言是C++14 (GCC 6-32)。
//writer:Oier_szc
#include <bits/stdc++.h>
//#include <windows.h>
#define ED cerr<<endl;
#define TS cerr<<"I AK IOI"<<endl;
#define cr(x) cerr<<x<<endl;
#define cr2(x,y) cerr<<x<<" "<<y<<endl;
#define cr3(x,y,z) cerr<<x<<" "<<y<<" "<<z<<endl;
#define cr4(x,y,z,w) cerr<<x<<" "<<y<<" "<<z<<" "<<w<<endl;
#define pii pair<int,int>
#define fi first
#define se second
//#define int long long
using namespace std;
const int N=20,INF=2e9,mod=1e9+7;
int n,t;
int a[N],pre[N];
vector<pii> ans;
void ins(int l,int r)
{
ans.push_back({l,r});
}
void make(int l,int r)
{
if(l==r) return;
ins(r,r);
for(int i=2;i<=r-l;++i)
{
make(r-i+1,r-1);
ins(r-i+1,r);
ins(r-i+1,r-1);
}
make(l,r-1);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
pre[i]=pre[i-1]+a[i];
}
int sum=pre[n];
int Ans=0,l=-1,r=-1,s;
for(int i=0;i<(1<<n);++i)
{
int get=0;
for(int j=1,k=1;j<=n;)
{
k=j;
while(k<=n&&(i>>(k-1))&1) ++k;
--k;
if(k<j)
{
++j;
continue;
}
get+=(k-j+1)*(k-j+1)-pre[k]+pre[j-1];
j=k+1;
}
if(get>Ans) Ans=get,s=i;
}
for(int j=1,k=1;j<=n;)
{
k=j;
while(k<=n&&(s>>(k-1))&1) ++k;
--k;
if(k<j)
{
++j;
continue;
}
for(int x=j;x<=k;++x)
{
if(a[x]) ins(x,x);
}
make(j,k);
ins(j,k);
j=k+1;
}
sum+=Ans;
printf("%d %d\n",sum,ans.size());
for(int i=0;i<ans.size();++i) printf("%d %d\n",ans[i].fi,ans[i].se);
return 0;
}
/*
18
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
*/