結果
問題 | No.493 とても長い数列と文字列(Long Long Sequence and a String) |
ユーザー |
|
提出日時 | 2022-07-18 18:06:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 7 ms / 800 ms |
コード長 | 2,672 bytes |
コンパイル時間 | 2,984 ms |
コンパイル使用メモリ | 204,840 KB |
最終ジャッジ日時 | 2025-01-30 10:58:12 |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 115 |
ソースコード
#include<bits/stdc++.h>using namespace std;#pragma GCC optimize("Ofast")#define rep(i,n) for(ll i=0;i<n;i++)#define repl(i,l,r) for(ll i=(l);i<(r);i++)#define per(i,n) for(ll i=(n)-1;i>=0;i--)#define perl(i,r,l) for(ll i=r-1;i>=l;i--)#define fi first#define se second#define pb push_back#define ins insert#define pqueue(x) priority_queue<x,vector<x>,greater<x>>#define all(x) (x).begin(),(x).end()#define CST(x) cout<<fixed<<setprecision(x)#define rev(x) reverse(x);using ll=long long;using vl=vector<ll>;using vvl=vector<vector<ll>>;using pl=pair<ll,ll>;using vpl=vector<pl>;using vvpl=vector<vpl>;const ll MOD=1000000007;const ll MOD9=998244353;const int inf=1e9+10;const ll INF=4e18;const ll dy[8]={1,0,-1,0,1,1,-1,-1};const ll dx[8]={0,1,0,-1,1,-1,1,-1};template <typename T> inline bool chmax(T &a, T b) {return ((a < b) ? (a = b, true) : (false));}template <typename T> inline bool chmin(T &a, T b) {return ((a > b) ? (a = b, true) : (false));}int main(){ios::sync_with_stdio(false);std::cin.tie(nullptr);ll now=0;vl len(61),sum(61),prod(61),centlen(61);vector<string> cent(61);len[0]=0;sum[0]=0;prod[0]=1;for(ll i=1;i<=60;i++){string f=to_string(i*i);ll digsum=0,digprod=1;rep(i,f.size()){ll q=f[i]-'0';if(q==0)q=10;digsum+=q;digprod*=q;}cent[i]=f;centlen[i]=f.size();len[i]=len[i-1]*2+f.size();sum[i]=sum[i-1]*2+digsum;prod[i]=(prod[i-1]*prod[i-1])%MOD*digprod%MOD;}ll k,l,r;cin >> k >> l >> r;l--;k=min(k,60LL);if(len[k]<r){cout << -1 << endl;return 0;}auto dp=[&](auto &self,ll v,ll l,ll r)->ll{if(l>=r)return 0;if(l==0&&r==len[v])return sum[v];if(r<=len[v-1])return self(self,v-1,l,r);if(len[v-1]+centlen[v]<=l)return self(self,v-1,l-len[v-1]-centlen[v],r-len[v-1]-centlen[v]);ll ns=0;for(ll i=len[v-1];i<len[v-1]+centlen[v];i++){if(l<=i&&i<r){ll q=cent[v][i-len[v-1]]-'0';if(q==0)q=10;ns+=q;}}return ns+self(self,v-1,l,len[v-1])+self(self,v-1,0,r-len[v-1]-centlen[v]);};auto dp2=[&](auto &self,ll v,ll l,ll r)->ll{if(l>=r)return 1;if(l==0&&r==len[v])return prod[v];if(r<=len[v-1])return self(self,v-1,l,r);if(len[v-1]+centlen[v]<=l)return self(self,v-1,l-len[v-1]-centlen[v],r-len[v-1]-centlen[v]);ll ns=1;for(ll i=len[v-1];i<len[v-1]+centlen[v];i++){if(l<=i&&i<r){ll q=cent[v][i-len[v-1]]-'0';if(q==0)q=10;ns*=q;}}return ns*self(self,v-1,l,len[v-1])%MOD*self(self,v-1,0,r-len[v-1]-centlen[v])%MOD;};cout << dp(dp,k,l,r) << " " << dp2(dp2,k,l,r) << endl;}