답안 #73131

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
73131 2018-08-27T18:43:02 Z aleksam 고대 책들 (IOI17_books) C++14
컴파일 오류
0 ms 0 KB
#include "books.h"

#include <bits/stdc++.h>
#define MAX_N 1000000
using namespace std;

struct cikl{
	int l, r;//Najlevlji i najdesnji
	long long sum;//suma p_i-i na ciklusu.
};

long long aps(int a){
	return a>0?a:-1*a;
}
vector<cikl> C;
int numcyc=0, numcom=0;//broj ciklova
int N;
long long ans=0;
bool mark[MAX_N];
//vector<int> p;
long long minimum_walk(vector<int> p, int s){
	//Ako je s=0 i n<1000
	N=p.size();
	while(N && p[N-1]==N-1){
		N--;//Ovaj deo mi ionako ne treba
	}
	int nula=0;
	while(nula<N && p[nula]==nula){
		nula++;
	}
	
	if(N==nula)return 0;
	for(int i=nula; i<N; ++i){
		if(!mark[i]){
			numcyc++;
			cikl A;
			A.l=A.r=i;
			A.sum=0;
			int cur=i;
			do{
				cur=p[cur];
				if(cur>A.r)A.r=cur;
				if(cur<A.l)A.l=cur;
				A.sum+=aps(p[cur]-cur);
				mark[cur]=1;
			}while(i!=cur);
			C.push_back(A);
			//Ovako formiran niz ciklova je sortiran prema levom kraju--koji je uvek i
		}
	}
	for(int i=0; i<numcyc; ++i){
		//printf("C[%d]:%d %d %d;\n", i, C[i].l, C[i].r, C[i].sum);
	}
	int scom=0, lcom=nula, rcom=nula;
	for(int i=0; i<numcyc; ++i){
		ans+=C[i].sum;
		if(C[i].l<=rcom){
			//Mogu da ga uhvatim, i dalje sam u istoj komponenti
		}
		else{
			if(s>=lcom && s<=rcom)//Menjam komponentu
				scom=numcom;
			numcom++;
			lcom=C[i].l;
		}
		if(C[i].r>rcom)
			rcom=C[i].r;
	}
	//printf("%d\n", ans);
	ans+=2*numcom;
	int mini=N;
	for(int i=nula; i<N; ++i){
		if((p[i]!=i) && (abs(s-i)<mini)){
			/printf("Updatujem i=%d mini=%d s=%d\n", i, mini, s);
			mini=abs(s-i);
			
		}
	}
	return ans+2*mini;
}

Compilation message

books.cpp: In function 'long long int minimum_walk(std::vector<int>, int)':
books.cpp:74:4: error: expected primary-expression before '/' token
    /printf("Updatujem i=%d mini=%d s=%d\n", i, mini, s);
    ^