Task: | Omenat |
Sender: | |
Submission time: | 2015-12-20 15:47:38 +0200 |
Language: | C++ |
Status: | READY |
Result: | 56 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 56.2 |
test | verdict | time | score | |
---|---|---|---|---|
#1 | ACCEPTED | 0.07 s | 6.1 | details |
#2 | ACCEPTED | 0.05 s | 6.7 | details |
#3 | ACCEPTED | 0.06 s | 5.5 | details |
#4 | ACCEPTED | 0.06 s | 6 | details |
#5 | ACCEPTED | 0.06 s | 4.6 | details |
#6 | ACCEPTED | 0.05 s | 5.7 | details |
#7 | ACCEPTED | 0.06 s | 5.8 | details |
#8 | ACCEPTED | 0.05 s | 5 | details |
#9 | ACCEPTED | 0.06 s | 5 | details |
#10 | ACCEPTED | 0.06 s | 5.8 | details |
Code
#include <iostream> #include <algorithm> #include <cassert> #include <cstdlib> #include <cstring> using namespace std; const int MN=101; typedef long long ll; typedef pair<int,int> P; P ps[MN]; int vs[MN]; const int MS = 100*1000; const int MS2 = MS/2; bool dp[MN][MS]; bool res[MN]; bool rres[MN]; int n; bool cur[MN]; double rnd() { return rand() / (double)RAND_MAX; } void sa() { ll r=0; for(int i=0; i<n; ++i) { cur[i] = rand()&1; r += (2*cur[i]-1)*vs[i]; } ll best = r; memcpy(res, cur, sizeof(res)); for(double t=10; t>0.01; t*=0.9999) { int x = rand()%n; int sign = cur[x] ? -2 : 2; ll rr = r + sign * vs[x]; if (llabs(rr) < llabs(r) || t > rnd()) { cur[x] ^= 1; r = rr; if (llabs(r) < llabs(best)) { best = r; memcpy(res,cur,sizeof(res)); } } } } int main() { srand(666); cin>>n; for(int i=0; i<n; ++i) { int x; cin>>x; ps[i]=P(x,i); } sort(ps,ps+n); for(int i=0; i<n; ++i) vs[i]=ps[i].first; int sum=0; for(int i=0; i<n; ++i) sum+=vs[i]; // assert(sum<MS2); sa(); for(int i=0; i<n; ++i) rres[ps[i].second] = res[i]; for(int i=0; i<n; ++i) cout<<1+rres[i]<<' ';cout<<'\n'; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
95 779724552 231968220 985023789 ... |
correct output |
---|
(empty) |
user output |
---|
1 1 2 2 1 2 1 2 2 2 1 1 1 1 2 ... |
Test 2
Verdict: ACCEPTED
input |
---|
85 229722261 51722691 862338862 8... |
correct output |
---|
(empty) |
user output |
---|
2 1 2 2 2 2 1 2 2 1 1 2 2 1 1 ... |
Test 3
Verdict: ACCEPTED
input |
---|
97 398995377 989444445 634573915 ... |
correct output |
---|
(empty) |
user output |
---|
1 1 1 1 1 2 2 2 2 1 2 2 2 1 2 ... |
Test 4
Verdict: ACCEPTED
input |
---|
99 843687873 164010938 51269970 4... |
correct output |
---|
(empty) |
user output |
---|
2 2 1 2 2 2 1 1 1 1 1 2 2 1 1 ... |
Test 5
Verdict: ACCEPTED
input |
---|
90 864611617 418460939 773297829 ... |
correct output |
---|
(empty) |
user output |
---|
2 2 1 2 2 2 1 1 1 1 1 2 1 1 2 ... |
Test 6
Verdict: ACCEPTED
input |
---|
92 289890246 25801423 763027596 7... |
correct output |
---|
(empty) |
user output |
---|
2 2 1 1 1 2 2 1 2 2 2 2 1 2 1 ... |
Test 7
Verdict: ACCEPTED
input |
---|
89 879039800 50522278 850785072 4... |
correct output |
---|
(empty) |
user output |
---|
2 2 2 2 2 2 1 2 2 1 1 2 1 1 1 ... |
Test 8
Verdict: ACCEPTED
input |
---|
96 27192469 222283781 681532515 1... |
correct output |
---|
(empty) |
user output |
---|
1 2 2 2 2 1 1 2 1 1 2 1 2 2 1 ... |
Test 9
Verdict: ACCEPTED
input |
---|
100 186459081 254674429 394007236 ... |
correct output |
---|
(empty) |
user output |
---|
2 2 2 2 2 2 1 2 2 1 2 1 1 2 1 ... |
Test 10
Verdict: ACCEPTED
input |
---|
98 612168861 979831717 671087051 ... |
correct output |
---|
(empty) |
user output |
---|
2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 ... |