結果
問題 | No.332 数列をプレゼントに |
ユーザー | tjake |
提出日時 | 2015-12-25 01:36:08 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,196 bytes |
コンパイル時間 | 1,065 ms |
コンパイル使用メモリ | 89,700 KB |
実行使用メモリ | 21,452 KB |
最終ジャッジ日時 | 2024-09-18 23:37:58 |
合計ジャッジ時間 | 15,612 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | WA | - |
testcase_05 | RE | - |
testcase_06 | RE | - |
testcase_07 | RE | - |
testcase_08 | RE | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | WA | - |
testcase_16 | RE | - |
testcase_17 | RE | - |
testcase_18 | RE | - |
testcase_19 | RE | - |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | RE | - |
testcase_24 | RE | - |
testcase_25 | RE | - |
testcase_26 | RE | - |
testcase_27 | RE | - |
testcase_28 | RE | - |
testcase_29 | RE | - |
testcase_30 | RE | - |
testcase_31 | RE | - |
testcase_32 | RE | - |
testcase_33 | RE | - |
testcase_34 | RE | - |
testcase_35 | RE | - |
testcase_36 | WA | - |
testcase_37 | RE | - |
testcase_38 | RE | - |
testcase_39 | RE | - |
testcase_40 | WA | - |
testcase_41 | WA | - |
testcase_42 | WA | - |
testcase_43 | WA | - |
testcase_44 | WA | - |
testcase_45 | RE | - |
testcase_46 | RE | - |
ソースコード
#include<iostream> #include<string> #include<vector> #include<queue> #include<stack> #include<map> #include<set> #include<algorithm> #include<functional> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; #define mind(a,b) (a>b?b:a) #define maxd(a,b) (a>b?a:b) #define absd(x) (x<0?-(x):x) #define pow2(x) ((x)*(x)) #define rep(i,n) for(int i=0; i<n; ++i) #define repr(i,n) for(int i=n-1; i>=0; --i) #define repl(i,s,n) for(int i=s; i<=n; ++i) #define replr(i,s,n) for(int i=n; i>=s; --i) #define repf(i,s,n,j) for(int i=s; i<=n; i+=j) #define repe(e,obj) for(auto e : obj) #define SP << " " << #define COL << " : " << #define COM << ", " << #define ARR << " -> " << #define PNT(STR) cout << STR << endl #define POS(X,Y) "(" << X << ", " << Y << ")" #define DEB(A) " (" << #A << ") " << A #define DEBREP(i,n,val) for(int i=0; i<n; ++i) cout << val << " "; cout << endl #define ALL(V) (V).begin(), (V).end() #define INF 1000000007 #define INFLL 10000000000000000007LL #define EPS 1e-9 typedef unsigned int uint; typedef unsigned long ulong; typedef unsigned long long ull; typedef long long ll; typedef long double ld; typedef pair<int, int> P; //typedef pair<ll, ll> P; typedef pair<P, int> PI; typedef pair<int, P> IP; typedef pair<P, P> PP; typedef priority_queue<P, vector<P>, greater<P> > pvqueue; #define N 110 #define W 100005 ll n, x; ll a[N]; struct Value { Value(ll x, string s) : x(x), s(s) {} Value() : x(0), s("") {} ll x; string s; bool operator<(const Value& v) const { return x < v.x; } }; Value dp[W]; int main() { cin >> n >> x; rep(i, n) cin >> a[i]; if(n < 40) { set<Value> p0; p0.insert(Value(0, "")); rep(i, n/2) { set<Value> p0_2; for(set<Value>::iterator it = p0.begin(); it != p0.end(); ++it) { Value v = *it; p0_2.insert(Value(v.x,v.s+"x")); p0_2.insert(Value(v.x+a[i], v.s+"o")); } p0 = p0_2; } set<Value> p1; p1.insert(Value(0, "")); repl(i, n/2, n-1) { set<Value> p1_2; for(set<Value>::iterator it = p1.begin(); it != p1.end(); ++it) { Value v = *it; p1_2.insert(Value(v.x, v.s+"x")); p1_2.insert(Value(v.x+a[i], v.s+"o")); } p1 = p1_2; } set<Value>::iterator p0_it = p0.begin(); set<Value>::reverse_iterator p1_rit = p1.rbegin(); while(p0_it != p0.end() && p1_rit != p1.rend()) { Value v0 = *p0_it, v1 = *p1_rit; cout << v0.s SP v1.s SP v0.x SP v1.x << endl; if(v0.x + v1.x == x) { cout << v0.s + v1.s << endl; exit(0); } ++p0_it; while(p0_it != p0.end() && p1_rit != p1.rend() && (*p0_it).x + (*p1_rit).x > x) ++p1_rit; } cout << "No" << endl; } else { dp[0].x = 1; rep(i, n) { replr(j, a[i], W-1) { if(!dp[j].x && dp[j-a[i]].x) { dp[j].x = 1; dp[j].s = dp[j-a[i]].s + "o"; } else { dp[j].s += "x"; } } rep(j, a[i]) { dp[j].s += "x"; } } rep(i, x+1) { cout << i SP dp[i].s << endl; } if(dp[x].x) { cout << dp[x].s << endl; } else { cout << "No" << endl; } } return 0; }