結果
問題 | No.1017 Reiwa Sequence |
ユーザー |
![]() |
提出日時 | 2020-04-03 23:13:02 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 65 ms / 2,000 ms |
コード長 | 1,531 bytes |
コンパイル時間 | 1,483 ms |
コンパイル使用メモリ | 170,692 KB |
実行使用メモリ | 37,120 KB |
最終ジャッジ日時 | 2024-07-03 05:58:54 |
合計ジャッジ時間 | 31,919 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 50 |
ソースコード
#include <bits/stdc++.h> #include <iomanip> using namespace std; #define reps(i,s,n) for(int i = s; i < n; i++) #define rep(i,n) reps(i,0,n) #define Rreps(i,n,e) for(int i = n - 1; i >= e; --i) #define Rrep(i,n) Rreps(i,n,0) #define ALL(a) a.begin(), a.end() #define fi first #define se second typedef long long ll; typedef vector<ll> vec; typedef vector<vec> mat; ll N,M,H,W,K,Q,A,B; string S; const ll MOD = 998244353; //const ll MOD = (1e+9) + 7; const ll INF = 1LL<<60; typedef pair<ll, ll> P; int n; vec mp((1LL<<22), -1); int ans = -1, pa = -1; void dfs(int plus, int num, vec &a, int sum){ if(num == n){ if(mp[sum] == -1){ mp[sum] = plus; }else{ pa = plus; ans = sum; } }else if(ans == -1){ dfs(plus | (1<<num), num + 1, a, sum + a[num]); dfs(plus, num + 1, a, sum); } } int main() { cin>>N; /*bool det = false; if(N >= 14){ cout<<"Yes"<<endl; N = 14; det = true; }*/ vec a(N); rep(i,N) cin>>a[i]; n = min(N, 22LL); vec k(n); rep(i,n) k[i] = a[i]; dfs(0, 0, k, 0); if(ans != -1){ cout<<"Yes"<<endl; rep(i,n){ int temp = 0; if((mp[ans]>>i)&1) temp += a[i]; if((pa>>i)&1) temp -= a[i]; cout<<temp; i == N - 1 ? cout<<endl : cout<<' '; } reps(i,n, N){ cout<<0; i == N - 1 ? cout<<endl : cout<<' '; } }else{ cout<<"No"<<endl; } }