Advertisement
Riz1Ahmed

H. Colorful Balls (ICPC Preli 2k18)

Oct 6th, 2018
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #define S 100000
  4. #define ll long long
  5. ll pos[S+5][2], pw[S+5], M=1e9+7, ans;
  6. void hishab(){//2nd idx0=Same, idx1=Defrent.
  7.     pos[0][0]=pos[0][1]=1;
  8.     pos[1][0]=2, pos[1][1]=1;
  9.     pw[0]=1ll, pw[1]=2ll;
  10.     for (int i=2; i<S; i++){
  11.         pw[i]=(pw[i-1]*2ll)%M;
  12.         pos[i][0]=(2ll*pos[i-1][1])%M;
  13.         pos[i][1]=(pos[i-1][0]+pos[i-1][1])%M;
  14.     }
  15. }
  16. int main(){
  17.     //freopen("in.txt","r",stdin);
  18.     hishab();
  19.     int t,cs=1;
  20.     char s[S+5],c;
  21.     scanf("%d",&t);
  22.     while (t--){
  23.         scanf("%s",s);
  24.         int l=strlen(s),i,f=0;
  25.         ans=1, c='-';
  26.         for (i=0; i<l; i++){
  27.             if (s[i]=='W') f++;
  28.             else{
  29.                 if (c=='-') ans=pw[f];
  30.         else if (c==s[i]) ans=(ans*pos[f][0])%M;
  31.                 else            ans=(ans*pos[f][1])%M;
  32.                 c=s[i], f=0;
  33.             }
  34.         } if (f) {
  35.             if (c=='-') ans=(3ll*pw[f-1])%M;
  36.             else ans=(ans*pw[f])%M;
  37.         }
  38.         printf("Case %d: %lld\n",cs++,ans);
  39.     } return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement