結果
| 問題 |
No.1017 Reiwa Sequence
|
| ユーザー |
cureskol
|
| 提出日時 | 2020-04-04 12:53:21 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 137 ms / 2,000 ms |
| コード長 | 1,407 bytes |
| コンパイル時間 | 1,841 ms |
| コンパイル使用メモリ | 177,076 KB |
| 実行使用メモリ | 12,316 KB |
| 最終ジャッジ日時 | 2024-07-03 07:15:02 |
| 合計ジャッジ時間 | 31,826 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 50 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int f(int a){
if(a%3<=1)return a%3;
return -1;
}
int n;
vector<int> v;
typedef pair<int,int> P;
void FIN(P a,P b){
cout<<"Yes"<<endl;
int u=a.second,w=b.second;
for(int i=0;i<n/2;i++){
cout<<v[i]*f(u)<<" ";
u/=3;
}
for(int i=0;i<n-n/2;i++){
cout<<-v[n/2+i]*f(w)<<" ";
w/=3;
}
for(int i=n;i<v.size();i++)cout<<0<<" ";
cout<<endl;
exit(0);
}
int pw(int n,int k){
assert(k>=0);
int res=1;
while(k){
if(k&1)res*=n;
n*=n;
k>>=1;
}
return res;
}
signed main(){
cin>>n;
v.resize(n);
for(int i=0;i<n;i++)cin>>v[i];
if(n>=24)n=24;
vector<P> s;
for(int j=0;j<pw(3,n/2);j++){
int tmp=0,tmpj=j;
for(int k=0;k<n/2;k++){
tmp+=v[k]*f(tmpj);
tmpj/=3;
}
s.push_back(P(tmp,j));
}
sort(s.begin(),s.end());
for(int j=0;j<pw(3,n-n/2);j++){
int tmp=0,tmpj=j;
for(int k=0;k<n-n/2;k++){
tmp+=v[n/2+k]*f(tmpj);
tmpj/=3;
}
int l=-1,r=s.size();
while(r-l>1){
int m=(r+l)>>1;
if(s[m].first>=tmp)r=m;
else l=m;
}
if(r<s.size()&&s[r].first==tmp&&s[r].second+j)FIN(s[r],P(tmp,j));
r++;
if(r<s.size()&&s[r].first==tmp&&s[r].second+j)FIN(s[r],P(tmp,j));
if(l>=0&&s[l].second+j&&s[l].first==tmp)FIN(s[l],P(tmp,j));
l--;
if(l>=0&&s[l].second+j&&s[l].first==tmp)FIN(s[l],P(tmp,j));
}
cout<<"No"<<endl;
}
cureskol