結果
問題 | No.653 E869120 and Lucky Numbers |
ユーザー |
![]() |
提出日時 | 2018-02-23 22:41:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,511 bytes |
コンパイル時間 | 804 ms |
コンパイル使用メモリ | 79,624 KB |
最終ジャッジ日時 | 2025-01-05 08:28:27 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 |
ソースコード
#include<algorithm> #include<iostream> #include<vector> using namespace std; typedef long long lint; typedef vector<int>vi; typedef pair<int,int>pii; #define rep(i,n)for(int i=0;i<(int)(n);++i) vi mul3(const vi &t){ int n=t.size(); vi ret(n); int car=0; rep(i,n){ car=car+t[i]*3; ret[i]=car%10; car/=10; } if(car!=0)ret.push_back(car); return ret; } vi add(const vi &t, int k){ int n=t.size(); vi ret(n); int car=0; rep(i,n){ car=car+t[i]; if(i==0)car+=k; ret[i]=car%10; car/=10; } if(car!=0)ret.push_back(car); return ret; } vi to_vi(const string &s){ vi d; rep(i,s.length())d.push_back(s[i]-'0'); reverse(d.begin(),d.end()); return d; } void fail(){ cout<<"No"<<endl; exit(0); } void succ(){ cout<<"Yes"<<endl; exit(0); } int main(){ string p;cin>>p; vi t=to_vi(p); t=mul3(t); t=add(t,4); if(0){ for(auto d:t)cerr<<" "<<d; cerr<<endl; } if(t.size()<=1){ fail(); } if(t[t.size()-1]==4){ // 0 or 6 ? bool ok=1; rep(i,t.size()-1){ if(t[i]%3!=0||t[i]>6)ok=0; } if(!ok)fail(); succ(); } if(t[t.size()-1]==2){ bool ok=1; int pos=-1; rep(i,t.size()-1){ if(i==0)continue; if(t[i]%3==2){ if(pos==-1){ pos=i; }else{ fail(); } } if(t[i]%3==1||t[i]==9)fail(); } if(pos==-1)fail(); rep(i,t.size()-2){ int v=t[i]/3; if(i<pos){ if(v>2)fail(); }else{ if(v>1)fail(); } } succ(); } fail(); }