#include <iostream> #include <stdio.h> #include <cstring> using namespace std; const int MAX_N = 5006; int a[MAX_N]; int f[MAX_N]; int pre[MAX_N]; int main () { int n; while (scanf("%d",&n) != EOF) { bool check=false; for (int x=1;n>=x;x++) { getchar(); char c; scanf("%c",&c); a[x] = (c=='B'); if (a[x]) check=true; } if (!check) { puts("0 0"); continue; } int ans1=n+1,ans2=-1; for (int k=1;n>=k;k++) { // cout<<"k = "<<k<<endl; memset(f,0,sizeof(f)); memset(pre,0,sizeof(pre)); int m=0; for (int x=1;n>=x;x++) { // cout<<"a["<<x<<"] = "<<a[x]<<endl; // cout<<"pre = "<<pre[max(x-1,0)] - pre[max(x-k,0)]<<endl; // cout<<"x = "<<x<<" , m = "<<m<<endl; if (x<=n-k+1) { if ((a[x] + pre[max(x-1,0)] - pre[max(x-k,0)]) % 2 != 0) { // cout<<"in2\n"; f[x]=1; m++; } } else { if ((a[x] + pre[max(x-1,0)] - pre[max(x-k,0)]) % 2 != 0) { m=-1; break; } } pre[x] = pre[x-1] + f[x]; } // cout<<"f : "; // for (int x=1;n>=x;x++) cout<<f[x]<<' '; // cout<<endl; if (m!=-1 && ans1>m) { ans1=m; ans2=k; } } printf("%d %d\n",ans2,ans1); } }
2016年10月16日 星期日
(POJ) 3276 -- Face The Right Way
http://poj.org/problem?id=3276
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言