cf747 D. Winter Is Coming

天呢,这个题2333333,真是被各种卡。完蛋完蛋完蛋。IQ------------;

 1 #include<bits/stdc++.h>
 2 #define lowbit(x) x&(-x) 
 3 #define LL long long 
 4 #define N 100005
 5 #define M 1000005
 6 #define mod 2147483648LL
 7 #define inf 0x7ffffffff
 8 using namespace std;
 9 inline int ra()
10 {
11     int x=0,f=1; char ch=getchar();
12     while (ch<'0' || ch>'9'){if (ch=='-') f=-1; ch=getchar();}
13     while (ch>='0' && ch<='9'){x=x*10+ch-'0'; ch=getchar();}
14     return x*f;
15 }
16 int n,k,last,ans,cnt;
17 int a[N<<1],b[N<<1];
18 int main()
19 {
20     n=ra(); k=ra();
21     for (int i=1; i<=n; i++) a[i]=ra();
22     int last,start=n+1;
23     for (int i=1; i<=n; i++)
24         if (a[i]<0) {
25             start=i;
26             break;
27         }
28     if (start<=n) ans=1,k--;
29     else {
30         cout<<"0";
31         return 0;
32     }
33     for (int i=start+1; i<=n; i++)
34     {
35         if (a[i]<0) k--;
36         if (a[i]>=0 && a[i-1]<0) last=i,ans++;
37         if (a[i]>=0 && a[i+1]<0) b[++cnt]=i-last+1,ans++; 
38     }
39     if (k<0)
40     {
41         cout<<"-1";
42         return 0;
43     }
44     sort(b+1,b+cnt+1);
45     for (int i=1; i<=cnt; i++)
46         if (k-b[i]<0) break;
47             else k-=b[i],ans-=2;
48     if (a[n]>=0)
49         for (int i=n; i>=1; i--)
50             if (a[i]<0)
51             {
52                 b[++cnt]=n-i;
53                 break;
54             }
55     if (b[cnt]<=k && cnt) ans--;
56     cout<<ans;
57     return 0;
58 } 

 

posted @ 2017-01-16 10:46  ws_ccd  阅读(98)  评论(0编辑  收藏  举报