結果
問題 | No.493 とても長い数列と文字列(Long Long Sequence and a String) |
ユーザー |
![]() |
提出日時 | 2017-03-11 00:06:10 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,362 bytes |
コンパイル時間 | 1,522 ms |
コンパイル使用メモリ | 170,684 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-24 09:10:56 |
合計ジャッジ時間 | 4,137 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 47 WA * 68 |
ソースコード
#include<bits/stdc++.h>using namespace std;typedef long long LL;typedef __int128 INT;#define CIN_ONLY if(1)struct cww{cww(){CIN_ONLY{ios::sync_with_stdio(false);cin.tie(0);}}}star;#define fin "\n"#define FOR(i,bg,ed) for(int i=(bg);i<(ed);i++)#define REP(i,n) FOR(i,0,n)#define ALL(v) (v).begin(),(v).end()#define fi first#define se second#define pb push_back#define DEBUG if(0)#define REC(ret, ...) std::function<ret (__VA_ARGS__)>template <typename T>inline void chmin(T &l,T r){l=min(l,r);}template <typename T>inline void chmax(T &l,T r){l=max(l,r);}template <typename T>istream& operator>>(istream &is,vector<T> &v){for(auto &it:v)is>>it;return is;}const int mod=1e9+7;INT len[100];LL sum[100];LL mul[100];LL getsum(LL l){int id=60;LL res=0;while(l>0){while(l<len[id])id--;l-=len[id];res=(res+sum[id])%mod;}return res;}LL getmul(LL l){int id=60;LL res=1;while(l>0){while(l<len[id])id--;l-=len[id];res=(res*mul[id])%mod;}return res;}// a x + b y = gcd(a, b)// O(log (a+b) )LL extgcd(LL a, LL b, LL &x, LL &y) {LL g = a; x = 1; y = 0;if (b != 0) g = extgcd(b, a % b, y, x), y -= (a / b) * x;return g;}// mを法とするaの逆元// O(log a)LL invMod(LL a) {LL x, y;if (extgcd(a, mod, x, y) == 1)return (x + mod) % mod;else return 0; // unsolvable}int main(){len[0]=0;sum[0]=0;mul[0]=1;FOR(i,1,61){LL x=i*i;len[i]=2*len[i-1]+to_string(x).size();mul[i]=mul[i-1]*mul[i-1]%mod;sum[i]=sum[i-1]*2%mod;while(x>0){LL y=x%10;if(y==0)y=10;mul[i]=mul[i]*y%mod;sum[i]=(sum[i]+y)%mod;x/=10;}}LL K,L,R;cin>>K>>L>>R;if(K>60)K=60;if(R>len[K]){cout<<-1<<endl;return 0;}FOR(i,0,61){LL x=(i+1)*(i+1);len[i]=len[i]+to_string(x).size();while(x>0){LL y=x%10;if(y==0)y=10;mul[i]=mul[i]*y%mod;sum[i]=(sum[i]+y)%mod;x/=10;}}LL A=mod+getsum(R)-getsum(L-1);LL B=getmul(R);if(L!=1)B*=invMod(getmul(L-1));cout<<A%mod<<" "<<B%mod<<endl;return 0;}