题意:
给出t串字符串,对每一个字符串。
使其max(删去的1,剩下的0)等于代价(删去一个1的代价为1)
题解:
可以使用前缀和数组记录0、1的个数。
【二分答案】:枚举起始点,二分查找符合题意的终点,算出本次最小价值。最后求所有最小中的最小。
另外分享一个大佬的解法:转到知乎——思维解法
#include#include using namespace std; #define sc scanf #define pr printf const int maxn=2e5+7; #define ll long long const int mod=1e9+7; int a[maxn]; int s0[maxn],s1[maxn]; int main() { int t;cin>>t; while(t--){ int mmin=INT_MAX; string s; cin>>s; int n=s.size()+1; s=" "+s; for(int i=1;i<=n;i++){ if(i==1){ s0[i]=(s[i]=='0'); s1[i]=(s[i]=='1'); } else { s0[i]=s0[i-1]+(s[i]=='0'); s1[i]=s1[i-1]+(s[i]=='1'); } } for(int i=1;i<=n;i++){ int l=i-1,r=n; ll ans=-1; while(l int mid=(l+r+1)/2; if(s0[mid]-s0[i-1] l=mid; } else{ ans=mid; r=mid-1; } } //cout<<"1"<



