結果
問題 | No.493 とても長い数列と文字列(Long Long Sequence and a String) |
ユーザー |
![]() |
提出日時 | 2017-03-11 00:16:13 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 800 ms |
コード長 | 2,669 bytes |
コンパイル時間 | 1,643 ms |
コンパイル使用メモリ | 163,944 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-24 09:13:28 |
合計ジャッジ時間 | 3,937 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 115 |
コンパイルメッセージ
main.cpp: In function ‘ll read()’: main.cpp:38:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 38 | scanf("%lld",&i); | ~~~~~^~~~~~~~~~~ main.cpp: In function ‘std::string readString()’: main.cpp:60:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 60 | scanf("%s",buf); | ~~~~~^~~~~~~~~~ main.cpp: In function ‘char* readCharArray()’: main.cpp:68:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 68 | scanf("%s",ret); | ~~~~~^~~~~~~~~~
ソースコード
#include <bits/stdc++.h>using namespace std;using ll=long long;#define int ll#define FOR(i,a,b) for(int i=int(a);i<int(b);i++)#define REP(i,b) FOR(i,0,b)#define MP make_pair#define PB push_back#define ALL(x) x.begin(),x.end()#define REACH cerr<<"reached line "<<__LINE__<<endl#define DBG(x) cerr<<"line "<<__LINE__<<" "<<#x<<":"<<x<<endlusing pi=pair<int,int>;using vi=vector<int>;using ld=long double;template<class T,class U>ostream& operator<<(ostream& os,const pair<T,U>& p){os<<"("<<p.first<<","<<p.second<<")";return os;}template<class T>ostream& operator <<(ostream& os,const vector<T>& v){os<<"[";REP(i,(int)v.size()){if(i)os<<",";os<<v[i];}os<<"]";return os;}int read(){int i;scanf("%lld",&i);return i;}void printSpace(){printf(" ");}void printEoln(){printf("\n");}void print(int x,int suc=1){printf("%lld",x);if(suc==1)printEoln();if(suc==2)printSpace();}string readString(){static char buf[3341919];scanf("%s",buf);return string(buf);}char* readCharArray(){static char buf[3341919];static int bufUsed=0;char* ret=buf+bufUsed;scanf("%s",ret);bufUsed+=strlen(ret)+1;return ret;}template<class T,class U>void chmax(T& a,U b){if(a<b)a=b;}template<class T,class U>void chmin(T& a,U b){if(a>b)a=b;}template<class T>T Sq(const T& t){return t*t;}const int inf=LLONG_MAX/3;const int mod=1000000007;template<class T,class U>void add(T& a,U b){a=((ll)a+b)%mod;}template<class T,class U>void sub(T& a,U b){a=((ll)a-b%mod+mod)%mod;}template<class T,class U>void mult(T& a,U b){a=((ll)a*b)%mod;}ll modPow(ll a,ll p){ll s=1;REP(i,30){if((p>>i)&1)mult(s,a);mult(a,a);}return s;}ll modInv(ll a){return modPow(a,mod-2);}string sq[61];int len[61],wa[61],sk[61];pi GanbaruZoi(int lv,int l,int r){if(r<=l)return pi(0,1);if(l==0&&r==len[lv]) return pi(wa[lv],sk[lv]);int x=len[lv-1],y=x+sq[lv].size();pi a(0,1),b(0,1);if(l<x) a=GanbaruZoi(lv-1,l,min(r,x));if(y<r) b=GanbaruZoi(lv-1,max(l,y)-y,r-y);int p=(a.first+b.first);int q=(a.second*b.second)%mod;FOR(i,max(x,l),min(y,r)){int d=sq[lv][i-x]-'0';if(!d)d=10;p+=d;mult(q,d);}return pi(p,q);}signed main(){int k=min(read(),60LL),l=read()-1,r=read();sk[0]=1;FOR(i,1,61){int x=i*i;len[i]=len[i-1]*2;wa[i]=wa[i-1]*2;sk[i]=sk[i-1]*sk[i-1]%mod;while(x){int d=x%10;if(!d)d=10;sq[i]+='0'+d;wa[i]+=d;mult(sk[i],d);len[i]++;x/=10;}reverse(ALL(sq[i]));}if(len[k]<r)cout<<-1<<endl;else{pi ans=GanbaruZoi(k,l,r);cout<<ans.first<<" "<<ans.second<<endl;}}