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 }