Submission #72372

#TimeUsernameProblemLanguageResultExecution timeMemory
72372team (#118)Dstorv (FXCUP3_dstorv)C++17
0 / 100
1083 ms404608 KiB
#include <bits/stdc++.h> #define M 1000000007 using namespace std; typedef long long ll; ll n,r,h,A,b; string s; int cnt,a[5010],c[5010],w[5010]; vector<int> v; ll pw(ll x,ll y){ ll tmp=1; while(y){ if(y%2) tmp=tmp*x%M; y /= 2; x=x*x%M; } return tmp; } ll gcd(ll x,ll y){return y?gcd(y,x%y):x;} void dfs(vector<int> vv){ if(vv.size()<=(A+b)){ int ct=0;int flg=0; for(int j=0;j<vv.size()-1;j++) if(vv[j]==1 && vv[j+1]==2){ flg=1;break; } if(flg) return; for(int j=0;j<vv.size();j++) if(vv[j]==1) ct++; if(ct==A) cnt++; return; } vector<int> tmp,pos; memset(c,0,sizeof(c)); for(int j=0;j<vv.size()-1;j++){ if(vv[j]==1 && vv[j+1]==2){ w[j]=pos.size();pos.push_back(j);c[j]=1; } } for(int i=0;i<(1<<pos.size());i++){ tmp.clear(); for(int j=0;j<vv.size();j++){ if(c[j]){ if(i&(1<<w[j])) tmp.push_back(1); else tmp.push_back(2); j++; } else { tmp.push_back(vv[j]); } } dfs(tmp); } } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>r>>h;cin>>s;cin>>A>>b; ll tmp=gcd(r,h); r/=tmp; h/= tmp; int tot=0; for(int i=0;i<n;i++){ if(s[i]=='R') a[i]=1; else a[i]=2,tot++; } for(int i=0;i<n;i++) v.push_back(a[i]); dfs(v); if((n-tot)>=A && tot>=b){ ll x1=cnt; ll x2=(r+h); if(!cnt) cout<<"0"<<'\n'; else { for(int i=0;i<n-A-b;i++){ x1/=gcd(x1,r+h); } x1=x1*pw(r,n-tot-A)%M*pw(h,tot-b)%M; cout<<pw(pw((r+h)/gcd(r+h,cnt),n-A-b),M-2)*pw(h,tot-b)%M*pw(r,n-tot-A)%M<<'\n'; } } else cout<<"0"<<'\n'; return 0; }

Compilation message (stderr)

dstorv.cpp: In function 'void dfs(std::vector<int>)':
dstorv.cpp:20:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(vv.size()<=(A+b)){
        ~~~~~~~~~^~~~~~~
dstorv.cpp:22:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<vv.size()-1;j++) if(vv[j]==1 && vv[j+1]==2){
                     ~^~~~~~~~~~~~
dstorv.cpp:26:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<vv.size();j++) if(vv[j]==1) ct++;
                     ~^~~~~~~~~~
dstorv.cpp:32:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=0;j<vv.size()-1;j++){
                 ~^~~~~~~~~~~~
dstorv.cpp:39:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<vv.size();j++){
                     ~^~~~~~~~~~
dstorv.cpp: In function 'int main()':
dstorv.cpp:64:23: warning: unused variable 'x2' [-Wunused-variable]
         ll x1=cnt; ll x2=(r+h);
                       ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...