Face The Right Way POJ
阿新 • • 發佈:2018-12-13
題解:
附上程式碼:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MAXN=5e3+50; int n; int dir[MAXN]; int f[MAXN]; int calc(int k) { memset(f,0,sizeof(f)); int res=0,sum=0; for(int i=0;i+k<=n;i++){ if((dir[i]+sum)%2!=0){ res++; f[i]=1; } sum+=f[i]; if(i-k+1>=0){ sum-=f[i-k+1]; } } for(int i=n-k+1;i<n;i++){ if((dir[i]+sum)%2!=0){ return -1; } if(i-k+1>=0){ sum-=f[i-k+1]; } } return res; } void solve() { int K=1,M=n; for(int k=1;k<=n;k++){ int m=calc(k); if(m>=0&&M>m){ M=m; K=k; } } printf("%d %d\n",K,M); } int main() { cin>>n; char c; for(int i=0;i<n;i++){ cin>>c; if(c=='B'){ dir[i]=1; } } solve(); return 0; }