답안 #66026

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
66026 2018-08-09T12:16:40 Z mhnd 이상적인 도시 (IOI12_city) C++14
컴파일 오류
0 ms 0 KB
//#include "grader.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
const int N = 5e5+50;
const ll oo = 1e18;
const ll mod = 1e9;

map<pair<ll,ll>,pair<int,int>> r,vis,cost;
ll ans = 0;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};

void bfs(int sx,int sy){
	queue<pair<pair<int,int>,int>> q;
	q.push({{sx,sy},0});
	while(q.size()){
		pair<int,int> u = q.front().first;
		int cst = q.front().second;
		q.pop();
		if(vis[u] == make_pair(sx,sy))continue;
		vis[u]={sx,sy};
		for(int i=0;i<4;i++){
			pair<int,int> v = {u.first+dx[i],u.second+dy[i]};
			if(cost[v] == make_pair(sx,sy))continue;
			cost[v]={sx,sy};
			ans = (ans+cst+1)%mod;
			q.push({v,cst+1});
		}
	}
}

int DistanceSum(int N, int *X, int *Y) {
	if(N<=2000){
		for(int i=0;i<N;i++)r[{X[i],Y[i]}]=1;
		for(int i=0;i<N;i++)bfs(X[i],Y[i]);
		return ans;
	}
	sort(X,X+N);
	int sum=0,ret=0,lst=X[0];
	for(int i=0;i<N;i++){
		if(X[i]!=lst){
			ret = (ret + (X[i]-lst)*1ll*(sum*1ll*(N-sum))%mod)%mod;
			lst = X[i];
		}
		sum++;
	}
	ans = ret;
	sort(Y,Y+N);
	sum=0;ret=0;lst=Y[0];
	for(int i=0;i<N;i++){
		if(Y[i]!=lst){
			ret = (ret + (Y[i]-lst)*1ll*(sum*1ll*(N-sum))%mod)%mod;
			lst = Y[i];
		}
		sum++;
	}
	ans = (ans+ret)%mod;
	return ans;
}

Compilation message

city.cpp: In function 'int DistanceSum(int, int*, int*)':
city.cpp:38:38: error: no match for 'operator=' (operand types are 'std::map<std::pair<long long int, long long int>, std::pair<int, int> >::mapped_type {aka std::pair<int, int>}' and 'int')
   for(int i=0;i<N;i++)r[{X[i],Y[i]}]=1;
                                      ^
In file included from /usr/include/c++/7/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/7/bits/char_traits.h:39,
                 from /usr/include/c++/7/ios:40,
                 from /usr/include/c++/7/istream:38,
                 from /usr/include/c++/7/sstream:38,
                 from /usr/include/c++/7/complex:45,
                 from /usr/include/c++/7/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from city.cpp:2:
/usr/include/c++/7/bits/stl_pair.h:367:7: note: candidate: std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_copy_assignable<_Tp>, std::is_copy_assignable<_T2> >::value, const std::pair<_T1, _T2>&, const std::__nonesuch_no_braces&>::type) [with _T1 = int; _T2 = int; typename std::conditional<std::__and_<std::is_copy_assignable<_Tp>, std::is_copy_assignable<_T2> >::value, const std::pair<_T1, _T2>&, const std::__nonesuch_no_braces&>::type = const std::pair<int, int>&]
       operator=(typename conditional<
       ^~~~~~~~
/usr/include/c++/7/bits/stl_pair.h:367:7: note:   no known conversion for argument 1 from 'int' to 'std::conditional<true, const std::pair<int, int>&, const std::__nonesuch_no_braces&>::type {aka const std::pair<int, int>&}'
/usr/include/c++/7/bits/stl_pair.h:384:7: note: candidate: std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch_no_braces&&>::type) [with _T1 = int; _T2 = int; typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch_no_braces&&>::type = std::pair<int, int>&&]
       operator=(typename conditional<
       ^~~~~~~~
/usr/include/c++/7/bits/stl_pair.h:384:7: note:   no known conversion for argument 1 from 'int' to 'std::conditional<true, std::pair<int, int>&&, std::__nonesuch_no_braces&&>::type {aka std::pair<int, int>&&}'
/usr/include/c++/7/bits/stl_pair.h:400:2: note: candidate: template<class _U1, class _U2> typename std::enable_if<std::__and_<std::is_assignable<_T1&, const _U1&>, std::is_assignable<_T2&, const _U2&> >::value, std::pair<_T1, _T2>&>::type std::pair<_T1, _T2>::operator=(const std::pair<_U1, _U2>&) [with _U1 = _U1; _U2 = _U2; _T1 = int; _T2 = int]
  operator=(const pair<_U1, _U2>& __p)
  ^~~~~~~~
/usr/include/c++/7/bits/stl_pair.h:400:2: note:   template argument deduction/substitution failed:
city.cpp:38:38: note:   mismatched types 'const std::pair<_T1, _T2>' and 'int'
   for(int i=0;i<N;i++)r[{X[i],Y[i]}]=1;
                                      ^
In file included from /usr/include/c++/7/bits/stl_algobase.h:64:0,
                 from /usr/include/c++/7/bits/char_traits.h:39,
                 from /usr/include/c++/7/ios:40,
                 from /usr/include/c++/7/istream:38,
                 from /usr/include/c++/7/sstream:38,
                 from /usr/include/c++/7/complex:45,
                 from /usr/include/c++/7/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:52,
                 from city.cpp:2:
/usr/include/c++/7/bits/stl_pair.h:411:2: note: candidate: template<class _U1, class _U2> typename std::enable_if<std::__and_<std::is_assignable<_T1&, _U1&&>, std::is_assignable<_T2&, _U2&&> >::value, std::pair<_T1, _T2>&>::type std::pair<_T1, _T2>::operator=(std::pair<_U1, _U2>&&) [with _U1 = _U1; _U2 = _U2; _T1 = int; _T2 = int]
  operator=(pair<_U1, _U2>&& __p)
  ^~~~~~~~
/usr/include/c++/7/bits/stl_pair.h:411:2: note:   template argument deduction/substitution failed:
city.cpp:38:38: note:   mismatched types 'std::pair<_T1, _T2>' and 'int'
   for(int i=0;i<N;i++)r[{X[i],Y[i]}]=1;
                                      ^