제출 #255231

#제출 시각아이디문제언어결과실행 시간메모리
255231AbelyanMechanical Doll (IOI18_doll)C++17
100 / 100
134 ms14744 KiB
#include <bits/stdc++.h>
#include "doll.h"
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

//#pragma GCC target("avx2")
//#pragma GCC optimization("unroll-loops")
//#pragma GCC optimize("O2")
//#pragma GCC optimize("O3")

#define FOR(i,a) for (int i=0;i<(a);++i)
#define FORD(i,a) for (int i=(a)-1;i>=0;i--)
#define FORT(i,a,b) for (int i=(a);i<=(b);++i)
#define FORTD(i,b,a) for (int i=(b);i>=(a);--i)
#define trav(i,v) for (auto i : v)
#define all(v) v.begin(),v.end()
#define ad push_back
#define fr first
#define sc second
#define mpr(a,b) make_pair(a,b)
#define pir pair<int,int>
#define make_unique(v) v.erase(unique(all(v)),v.end())
#define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define srng mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
#define y1 EsiHancagorcRepa

const int N=2e6+6;

struct ban{
	int key;
	int* a;
	ban(){}
	ban(int _key,int* _a){
		key=_key;
		a=_a;
	}
	bool operator < (ban other){
		if (key<other.key)return true;
		return false;
	}
};

int n,qan=1,tv=0;
int x[N],y[N];
vector<int> c;
vector<ban> vc;

int cnt=0;
int pw=1,ham=0;

void build(int l,int r,int *pr){
	int sz=(r-l+1);
	
	
	if (sz<=tv){
		tv-=sz;
		*pr=-1;
		return;
	}
	if (l==r){
		//cout<<<endl;
		vc.ad({ham,pr});
		return;
	}
	int md=(l+r)/2;
	int tham=cnt++;
	pw*=2;
	//cout<<l<<" "<<md<<" "<<&x[tham]<<endl;
	build(l,md,&x[tham]);
	ham+=(pw/2);
	build(md+1,r,&y[tham]);
	ham-=(pw/2);
	pw/=2;
	*pr=-(tham+1);
	//cout<<tham+1<<" "<<x[tham]<<" "<<y[tham]<<endl;

}

void create_circuit(int m, vector<int> a) {
	n=a.size();
	c.resize(m+1,-1);
	int nn=n;
	while(nn!=1){
		nn/=2;
		qan++;
	}
	qan=(1<<qan);
	n++;
	tv=qan-n;
	//cout<<tv<<endl;
	int smth;
	build(0,qan-1,&smth);
	sort(all(vc));
	//cout<<1<<endl;
	vector<int> xx,yy;
	
	FOR(i,vc.size()){
		if (i==vc.size()-1)*vc[i].a=0;
		else *vc[i].a=a[i];
	}
	//cout<<vc.size()<<endl;
	//cout<<"--"<<" "<<cnt<<endl;
	FOR(i,cnt){
		//cout<<x[i]<<" "<<y[i]<<endl;
		xx.ad(x[i]);
		yy.ad(y[i]);
	}
	//cout<<2<<endl;
	answer(c,xx,yy);
	
}

컴파일 시 표준 에러 (stderr) 메시지

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:14:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<ban>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 | #define FOR(i,a) for (int i=0;i<(a);++i)
      |                                ^
doll.cpp:100:2: note: in expansion of macro 'FOR'
  100 |  FOR(i,vc.size()){
      |  ^~~
doll.cpp:101:8: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<ban>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |   if (i==vc.size()-1)*vc[i].a=0;
      |       ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...