답안 #24656

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
24656 2017-06-10T20:26:18 Z jiangzhi CEOI16_icc (CEOI16_icc) C++11
0 / 100
173 ms 2088 KB
#include <cstdio>
#include <vector>
#include <algorithm> 
#include "icc.h"

using namespace std;

const int N = 110;

int a[N];
int size_a;
int b[N];
int size_b;

int t1[N];
int size_t1;
int t2[N];
int size_t2;

int pai[N];

vector<int> aux[N];

int find(int a){
	if(pai[a]==a)return a;
	return pai[a] = find(pai[a]);
}

void run(int n){
	vector<int> total;
	for(int i = 1; i <= n; i++){
		total.push_back(i);
		aux[i].push_back(i);
		pai[i]=i;
	}		
	for(int cas = 1; cas <= n - 1; cas++){
		while(1){
			random_shuffle(total.begin(),total.end());
			for(int i = 0; i < total.size(); i++){
				//printf("%d ",total[i]);
			}
			printf("\n");
			size_a = 0;
			size_b = 0;
			for(int i = 0; i < total.size(); i++){
				if(i%2==0){
					for(int j = 0; j < aux[total[i]].size(); j++){
						a[size_a++]=aux[total[i]][j];
						//printf("a %d %d %d\n",total[i],j,aux[total[i]][j]);
					}
				}
				else{
					for(int j = 0; j < aux[total[i]].size(); j++){
						b[size_b++]=aux[total[i]][j];
						//printf("a %d %d %d\n",total[i],j,aux[total[i]][j]);
					}
				}
			}
			if(query(size_a,size_b,a,b))break;
		}
		while(size_a!=1){
			size_t1 = 0;
			size_t2 = 0;
			for(int i = 0; i < size_a; i++){

				if(i%2==0){
					t1[size_t1++]=a[i];
				}
				else{
					t2[size_t2++]=a[i];
				}
			}
			if(query(size_t1,size_b,t1,b)){
				size_a = size_t1;
				for(int i = 0; i < size_t1; i++){
					a[i]=t1[i];
				}
			}
			else{
				size_a = size_t2;
				for(int i = 0; i < size_t2; i++){
					a[i]=t2[i];
				}
			}
		}
		while(size_b!=1){
			size_t1 = 0;
			size_t2 = 0;
			for(int i = 0; i < size_b; i++){
				if(i%2==0){
					t1[size_t1++]=b[i];
				}
				else{
					t2[size_t2++]=b[i];
				}
			}
			if(query(size_a,size_t1,a,t1)){
				size_b=size_t1;
				for(int i = 0; i < size_t1; i++){
					b[i]=t1[i];
				}
			}
			else{
				size_b=size_t2;
				for(int i = 0; i < size_t2; i++){
					b[i]=t2[i];
				}
			}
		}
		setRoad(a[0],b[0]);

		a[0]=find(a[0]);
		b[0]=find(b[0]);
		//printf("after find %d %d\n",a[0],b[0]);
		if(a[0]==b[0])continue;
		int val;
		if(aux[a[0]].size()>aux[b[0]].size()){
			for(int i = 0; i < aux[b[0]].size(); i++){
				aux[a[0]].push_back(aux[b[0]][i]);
			}
			aux[b[0]].clear();
			val = b[0];
			pai[b[0]]=a[0];
		}
		else{
			for(int i = 0; i < aux[a[0]].size(); i++){
				aux[b[0]].push_back(aux[a[0]][i]);
			}			
			aux[a[0]].clear();
			val = a[0];
			pai[a[0]]=b[0];
		}
		//printf("val %d\n",val);
		vector<int>total2;
		for(int i = 0; i < total.size(); i++){
			if(total[i]!=val)total2.push_back(total[i]);
		}
		total.clear();
		for(int i = 0; i < total2.size(); i++){
			total.push_back(total2[i]);
		}
	}
	exit;
}







Compilation message

icc.cpp: In function 'void run(int)':
icc.cpp:39:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i < total.size(); i++){
                     ^
icc.cpp:45:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i < total.size(); i++){
                     ^
icc.cpp:47:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      for(int j = 0; j < aux[total[i]].size(); j++){
                       ^
icc.cpp:53:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
      for(int j = 0; j < aux[total[i]].size(); j++){
                       ^
icc.cpp:118:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i < aux[b[0]].size(); i++){
                     ^
icc.cpp:126:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i = 0; i < aux[a[0]].size(); i++){
                     ^
icc.cpp:135:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < total.size(); i++){
                    ^
icc.cpp:139:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < total2.size(); i++){
                    ^
icc.cpp:143:6: warning: statement is a reference, not call, to function 'exit' [-Waddress]
  exit;
      ^
icc.cpp:143:6: warning: statement has no effect [-Wunused-value]
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 2088 KB Program is not terminated properly.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 33 ms 2088 KB Program is not terminated properly.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 126 ms 2084 KB Program is not terminated properly.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 156 ms 2088 KB Program is not terminated properly.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 159 ms 2088 KB Program is not terminated properly.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 173 ms 2084 KB Program is not terminated properly.
2 Halted 0 ms 0 KB -