CSES - Putka Open 2015 – finaali - Results
Submission details
Task:Omenat
Sender:
Submission time:2015-12-20 21:50:19 +0200
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#14.3
Test results
testverdicttimescore
#1ACCEPTED0.05 s0.4details
#20.14 s0details
#30.16 s0details
#4ACCEPTED0.05 s1.5details
#50.15 s0details
#60.15 s0details
#70.17 s0details
#8ACCEPTED0.05 s1details
#90.15 s0details
#10ACCEPTED0.06 s1.4details

Compiler report

input/code.cpp: In member function 'int TXD::Set(int, int)':
input/code.cpp:22:3: warning: no return statement in function returning non-void [-Wreturn-type]
   }
   ^
input/code.cpp: In function 'int main()':
input/code.cpp:82:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0; i<txds.size(); ++i){
                    ^
input/code.cpp:89:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for (int i=0; i<txds.size(); ++i)
                      ^

Code

#include <iostream>
#include <vector>
using namespace std;

int n;

int p[101];

class TXD{
  unsigned long long a[1010][2];
  unsigned long long n[1010][2];
  int M;
  int T;
public:
  bool found;
  int Set(int v, int t){
    M=v;
    T=t%M;
    for (int i=0; i<M; ++i){ a[i][0]=0; a[i][1]=0;}
    for (int i=0; i<M; ++i){ n[i][0]=0; n[i][1]=0;}
    a[0][1]|=(1ull<<63);
  }
  void Push(int id){
    unsigned long long c=0;
    if (id<64) c|=(1ull<<id);
    else       c|=(1ull<<(id-64));
    
    for (int i=0; i<M; ++i){
      if (a[i][1]&(1ull<<63)){
        int nid=(i+p[id])%M;
        n[nid][0]=a[i][0]; 
        n[nid][1]=a[i][1];
        if (i<64)n[nid][0]|=c;
        else     n[nid][1]|=c;
      }
    }
    for (int i=0; i<M; ++i){
      if (n[i][0] || n[i][1]){
        a[i][1]|=(1ull<<63);
        a[i][0]|=n[i][0];
        a[i][1]|=n[i][1];
        n[i][0]=0;
        n[i][1]=1;
      }
    }
    if (a[T][1]&(1ull<<63)) found=1;
  }
  unsigned long long GetTV(int i){
    return a[T][i];
  }
  TXD(){
    found=0;
  }
};

vector<TXD> txds;



long long s;

void Texi(int i){
  TXD k;
  k.Set(i, s/2);
  txds.push_back(k);
}

int main(){
  cin >> n;
  for (int i=0; i<n; ++i){
    cin >> p[i];
    s+=p[i];
  }
  for (int i=2; i<1010; i*=2) Texi(i);

  
  int ci=0;
  bool ready=0;
  unsigned long long sc[2];
  while (1){
    ready=1;
    for (int i=0; i<txds.size(); ++i){
      txds[i].Push(ci);
      ready=ready && txds[i].found;
    }
    ++ci;
    if (ready){
      sc[0]=0; sc[1]=0; --sc[0]; --sc[1];
      for (int i=0; i<txds.size(); ++i)
        for (int b=0; b<2; ++b) sc[b]&=txds[i].GetTV(b);
      
      long long sts=0;
      for (int i=0; i<n; ++i){
        bool is=0;
        if (i<64) is=(sc[0]&(1ull<<i));
        else is=(sc[0]&(1ull<<(i-64)));
        if (is) sts+=p[i];
      }
      if (sts>=s/2) break;
    }
  }
  
  for (int i=0; i<n; ++i){
    bool is=0;
    if (i<64) is=(sc[0]&(1ull<<i));
    else is=(sc[0]&(1ull<<(i-64)));
    cout << (is?1:2) << "\n";
  }
}

Test details

Test 1

Verdict: ACCEPTED

input
95
779724552 231968220 985023789 ...

correct output
(empty)

user output
1
1
1
1
1
...

Test 2

Verdict:

input
85
229722261 51722691 862338862 8...

correct output
(empty)

user output
(empty)

Test 3

Verdict:

input
97
398995377 989444445 634573915 ...

correct output
(empty)

user output
(empty)

Test 4

Verdict: ACCEPTED

input
99
843687873 164010938 51269970 4...

correct output
(empty)

user output
1
1
1
1
1
...

Test 5

Verdict:

input
90
864611617 418460939 773297829 ...

correct output
(empty)

user output
(empty)

Test 6

Verdict:

input
92
289890246 25801423 763027596 7...

correct output
(empty)

user output
(empty)

Test 7

Verdict:

input
89
879039800 50522278 850785072 4...

correct output
(empty)

user output
(empty)

Test 8

Verdict: ACCEPTED

input
96
27192469 222283781 681532515 1...

correct output
(empty)

user output
1
1
1
1
1
...

Test 9

Verdict:

input
100
186459081 254674429 394007236 ...

correct output
(empty)

user output
(empty)

Test 10

Verdict: ACCEPTED

input
98
612168861 979831717 671087051 ...

correct output
(empty)

user output
1
1
1
1
1
...