# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
258954 |
2020-08-06T20:35:23 Z |
kimbj0709 |
ICC (CEOI16_icc) |
C++14 |
|
149 ms |
688 KB |
#include<bits/stdc++.h>
#include "icc.h"
using namespace std;
//#define int long long
vector<int> color(105);
vector<vector<int> > comp(105);
int q(vector<int> &a,vector<int> &b){
if(a.size()==0||b.size()==0){
return 0;
}
int aa[(int)a.size()];
int bb[(int)b.size()];
for(int i=0;i<(int)a.size();i++){
aa[i] = a[i];
}
for(int i=0;i<(int)b.size();i++){
bb[i] = b[i];
}
return query(a.size(),b.size(),aa,bb);
}
int qcomp(vector<int> &a,vector<int> &b){
vector<int> temp1,temp2;
for(auto k:a){
for(auto j:comp[k]){
temp1.push_back(j);
}
}
for(auto k:b){
for(auto j:comp[k]){
temp2.push_back(j);
}
}
return q(temp1,temp2);
}
void road(int a,int b){
setRoad(min(a,b),max(a,b));
}
void merge(int a,int b){
for(auto k:comp[color[b]]){
comp[color[a]].push_back(k);
}
int change = color[b];
for(int i=1;i<color.size();i++){
if(color[i]==change){
color[i] = color[a];
}
}
comp[change].clear();
}
void binarysearch(vector<int> left,vector<int> right){
vector<int> temp1;
vector<int> temp2;
for(auto k:left){
for(auto j:comp[k]){
temp1.push_back(j);
}
}
for(auto k:right){
for(auto j:comp[k]){
temp2.push_back(j);
}
}
left = temp1;
right = temp2;
while(left.size()!=1){
vector<int> curr;
for(int i=0;i<(left.size()+1)/2;i++){
curr.push_back(left[i]);
}
vector<int> curr2;
for(int i=(left.size()+1)/2;i<left.size();i++){
curr2.push_back(left[i]);
}
if(q(curr,right)==1){
left = curr;
}
else{
left = curr2;
}
}
swap(left,right);
while(left.size()!=1){
vector<int> curr;
for(int i=0;i<(left.size()+1)/2;i++){
curr.push_back(left[i]);
}
vector<int> curr2;
for(int i=(left.size()+1)/2;i<left.size();i++){
curr2.push_back(left[i]);
}
if(q(curr,right)==1){
left = curr;
}
else{
left = curr2;
}
}
assert(left.size()==1&&right.size()==1);
road(left[0],right[0]);
merge(left[0],right[0]);
}
void run(int n){
srand(5542);
for(int i=0;i<color.size();i++){
comp[i].clear();
comp[i].push_back(i);
color[i] = i;
}
vector<int> rands;
for(int i=0;i<10;i++){
rands.push_back(i);
}
for(int i=0;i<n-1;i++){
vector<int> current;
for(int j=1;j<=n;j++){
if(comp[j].size()!=0){
current.push_back(j);
}
}
//random_shuffle(rands.begin(),rands.end());
for(int ii=0;ii<rands.size();ii++){
vector<int> a,b;
for(int j=0;j<current.size();j++){
if((1<<rands[ii])&j){
a.push_back(current[j]);
}
else{
b.push_back(current[j]);
}
}
if(qcomp(a,b)==1){
binarysearch(a,b);
goto cont;
}
}
assert(1==0);
cont : ;
}
}
Compilation message
icc.cpp: In function 'void merge(int, int)':
icc.cpp:43:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=1;i<color.size();i++){
~^~~~~~~~~~~~~
icc.cpp: In function 'void binarysearch(std::vector<int>, std::vector<int>)':
icc.cpp:67:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<(left.size()+1)/2;i++){
~^~~~~~~~~~~~~~~~~~
icc.cpp:71:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=(left.size()+1)/2;i<left.size();i++){
~^~~~~~~~~~~~
icc.cpp:84:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<(left.size()+1)/2;i++){
~^~~~~~~~~~~~~~~~~~
icc.cpp:88:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=(left.size()+1)/2;i<left.size();i++){
~^~~~~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:104:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<color.size();i++){
~^~~~~~~~~~~~~
icc.cpp:121:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int ii=0;ii<rands.size();ii++){
~~^~~~~~~~~~~~~
icc.cpp:123:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=0;j<current.size();j++){
~^~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
6 ms |
512 KB |
Ok! 99 queries used. |
2 |
Correct |
7 ms |
512 KB |
Ok! 101 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
34 ms |
512 KB |
Ok! 520 queries used. |
2 |
Correct |
43 ms |
512 KB |
Ok! 652 queries used. |
3 |
Correct |
42 ms |
632 KB |
Ok! 636 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
123 ms |
512 KB |
Ok! 1435 queries used. |
2 |
Correct |
149 ms |
632 KB |
Ok! 1593 queries used. |
3 |
Correct |
139 ms |
640 KB |
Ok! 1593 queries used. |
4 |
Correct |
139 ms |
632 KB |
Ok! 1465 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
141 ms |
512 KB |
Ok! 1520 queries used. |
2 |
Correct |
137 ms |
568 KB |
Ok! 1437 queries used. |
3 |
Correct |
136 ms |
512 KB |
Ok! 1569 queries used. |
4 |
Correct |
129 ms |
688 KB |
Ok! 1517 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
137 ms |
512 KB |
Ok! 1546 queries used. |
2 |
Correct |
133 ms |
512 KB |
Ok! 1537 queries used. |
3 |
Correct |
143 ms |
572 KB |
Ok! 1586 queries used. |
4 |
Correct |
135 ms |
512 KB |
Ok! 1545 queries used. |
5 |
Correct |
132 ms |
512 KB |
Ok! 1488 queries used. |
6 |
Correct |
135 ms |
632 KB |
Ok! 1532 queries used. |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
139 ms |
512 KB |
Ok! 1549 queries used. |
2 |
Correct |
144 ms |
512 KB |
Ok! 1598 queries used. |