結果
問題 | No.493 とても長い数列と文字列(Long Long Sequence and a String) |
ユーザー |
![]() |
提出日時 | 2017-03-11 00:11:11 |
言語 | C++11 (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,650 bytes |
コンパイル時間 | 1,318 ms |
コンパイル使用メモリ | 163,932 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-24 09:11:16 |
合計ジャッジ時間 | 3,987 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 7 WA * 108 |
コンパイルメッセージ
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<<endl using 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'; p+=d; mult(q,d?d:10); } 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; sq[i]+='0'+d; wa[i]+=d; mult(sk[i],d?d:10); 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; } }