一开始想复杂了。
其实很简单。就挨着扫一遍,每次优先排数量大的,然后交替排就好了
#include <iostream> #include <bits/stdc++.h> using namespace std; int main() { char s[200005]; int tot[100005]={0}; int n,a,b; cin>>n>>a>>b; int i,j; for(i=0;i<n;i++) { cin>>s[i]; } int flag;//flag=1,放a,否则放b if(a>b) flag=1; else flag=0; int ans=0; for(i=0;i<n;i++) { if(s[i]=='.'&&a>0&&b>0) { if(flag==1) { a--; ans++; flag=0; } else { b--; ans++; flag=1; } } else if(s[i]=='.'&&a>0&&b==0) { a--; i++; ans++; } else if(s[i]=='.'&&a==0&&b>0) { b--; i++; ans++; } else if(s[i]=='*')//如果遇到*,重新比较ab大小 { if(a>b) flag=1; else flag=0; } } printf("%d ",ans); return 0; }