제출 #823817

#제출 시각아이디문제언어결과실행 시간메모리
823817Trumling자동 인형 (IOI18_doll)C++14
53 / 100
103 ms15384 KiB
#include "doll.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define all(x) x.begin(),x.end() typedef long long ll; #define INF 99999999999999 #define pb push_back void create_circuit(int M, std::vector<int> A) { int N = A.size(); A.pb(0); vector<int> C(M + 1); vector<vector<int>>vis(M+1); vector<int>sw(M+1,0); ll idx=0; vector<int> X, Y; C[0]=A[0]; for(int i=0;i<N;i++) vis[A[i]].pb(i); for(int i=1;i<=M;i++) { if(!vis[i].size()) continue; if(vis[i].size()==1) { C[i]=A[vis[i][0]+1]; continue; } ll j=0; while((1<<j)<vis[i].size()) j++; ll start=idx; C[i]=-(idx+1); X.pb(-(idx+1)); Y.pb(-(idx+1)); queue<pair<pair<int,int>,pair<int,int>>>q; q.push({{1,idx},{0,1}}); idx++; while(!q.empty()) { ll d=q.front().F.F,id=q.front().F.S; ll l=q.front().S.F,r=q.front().S.S; q.pop(); if(j==d) { if(l<vis[i].size()-1); X[id]=A[vis[i][l]+1]; if(r<vis[i].size()-1) Y[id]=A[vis[i][r]+1]; if(r==(1<<j)-1) Y[id]=A[vis[i][vis[i].size()-1]+1]; continue; } if(l<vis[i].size()-1) { X[id]=-(idx+1); X.pb(-(start+1)); Y.pb(-(start+1)); q.push({{d+1,idx},{l,l+(1<<d)}}); } if(r==(1<<d)-1 || r<vis[i].size()) { idx++; Y[id]=-(idx+1); X.pb(-(start+1)); Y.pb(-(start+1)); q.push({{d+1,idx},{r,r+(1<<d)}}); idx++; } } } answer(C, X, Y); }

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

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:35:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         while((1<<j)<vis[i].size())
      |               ~~~~~~^~~~~~~~~~~~~~
doll.cpp:55:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |                 if(l<vis[i].size()-1);
      |                    ~^~~~~~~~~~~~~~~~
doll.cpp:55:17: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   55 |                 if(l<vis[i].size()-1);
      |                 ^~
doll.cpp:56:21: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   56 |                     X[id]=A[vis[i][l]+1];
      |                     ^
doll.cpp:57:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |                 if(r<vis[i].size()-1)
      |                    ~^~~~~~~~~~~~~~~~
doll.cpp:64:17: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |             if(l<vis[i].size()-1)
      |                ~^~~~~~~~~~~~~~~~
doll.cpp:72:32: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |             if(r==(1<<d)-1 || r<vis[i].size())
      |                               ~^~~~~~~~~~~~~~
#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...