您的位置:首页 > 其它

第十六周 12.14---12.20

2015-12-14 08:00 169 查看
新的一周>_<

---12.14

补之前的一场 cf

cf 604c
http://codeforces.com/contest/604/problem/C
给一串长度为 n 的 01串,可以翻转一个区间,问能够得到的最长的01序列是多长(可以不连续)

没有想出来,,,

其实可以发现,翻转一个区间,能够给原串带来2个贡献,所以算出原来的最长的加上 2 和 n 取最小值就好了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int maxn = 1e5+5;
int a[maxn],b[maxn],c[maxn];
int n;

void solve(){
if(n%2 == 0){
puts("-1");
return;
}
for(int i = 0;i < n;i++) c[i] = i;
a[0] = 0;
for(int i = 1;i <= n/2;i++){
a[i] = i*2;
a[i+n/2] = i*2-1;
}
b[0] = 0;
for(int i = 1;i < n;i++){
b[i] = n-i;
}
for(int i = 0;i < n;i++) printf("%d ",a[i]);
printf("\n");
for(int i = 0;i < n;i++) printf("%d ",b[i]);
printf("\n");
for(int i = 0;i < n;i++) printf("%d ",c[i]);
printf("\n");
}

int main(){
while(scanf("%d",&n) != EOF){
solve();
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: