Educational Codeforces Round 11 C hard process_補題——做爲司老大的腦殘粉

  司老大當時教了一種姿式枚舉連續K個0,說實話當時比賽寫這題徹底蒙了 縱而後來知道思路仍是寫了一段時間 真的是。。ios

題目大意  n長度的序列,由0 1構成 咱們能夠改變 k個0爲1 求能夠獲得的最長連續1序列的長度c++

既然求連續1 咱們貪心連續k個0 枚舉端點 左端點0設置爲0 右端點0設置爲 n+1 中間統計一下 最長長度和改變的0的位置就OK了  ide

 1 #include<cstdio>
 2 #include<map>
 3 //#include<bits/stdc++.h>
 4 #include<vector>
 5 #include<stack>
 6 #include<iostream>
 7 #include<algorithm>
 8 #include<cstring>
 9 #include<cmath>
10 #include<queue>
11 #include<cstdlib>
12 #include<climits>
13 #define INF 0x3f3f3f3f
14 using namespace std;
15 typedef long long ll;
16 typedef __int64 int64;
17 const ll mood=1e9+7;
18 const int64 Mod=998244353;
19 const double eps=1e-9;
20 const int MAXN=100010;
21 const double PI=acos(-1.0);
22 inline void rl(ll&num){
23     num=0;ll f=1;char ch=getchar();
24     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
25     while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();
26     num*=f;
27 }
28 inline void ri(int &num){
29     num=0;int f=1;char ch=getchar();
30     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
31     while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();
32     num*=f;
33 }
34 int getnum()//相鄰的個位整數輸入 如想分別保存1234 輸入連續的1234 a[i]=getnum();就能夠實現
35 {
36     char ch=getchar();
37     while((ch<'0' || ch>'9') && ch!='-')
38         ch=getchar();
39     return (ch-'0');
40 }
41 inline void out(int x){ if(x<0) {putchar('-');  x*=-1;}if(x>9) out(x/10);  putchar(x%10+'0'); }
42 int a[300020],b[300020];
43 int main()
44 {
45     int n,k;
46     ri(n),ri(k);
47     int len=0,tem;
48     for(int i=1;i<=n;i++)
49     {
50         ri(b[i]);
51         if(!b[i]) a[++len]=i;
52     }
53     if(k>=len){
54         out(n);putchar('\n');
55         for(int i=1;i<=n;i++)
56         {
57             putchar('1');
58             if(i!=n)putchar(' ');
59         }
60         putchar('\n');
61     }
62     else{
63         a[0]=0;a[len+1]=n+1;
64         int mx=-1,l,r;
65         for(int i=1;i-1+k<=len;i++)
66         {
67             if(mx<a[i+k]-a[i-1]-1)
68             {
69                 mx=a[i+k]-a[i-1]-1;
70                 l=a[i-1]+1;
71                 r=a[i+k]-1;
72             }
73         }
74         out(mx);putchar('\n');
75         for(int i=1;i<=n;i++)
76         {
77             if(i>=l&&i<=r)putchar('1');
78             else out(b[i]);
79             if(i!=n)putchar(' ');
80         }
81     }
82     return 0;
83 }
要有思想

至於廷偉菊苣說的dp和線段樹姿式還不會。。。spa

相關文章
相關標籤/搜索