답안 #136838

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
136838 2019-07-26T10:41:34 Z hamzqq9 Coin Collecting (JOI19_ho_t4) C++14
0 / 100
2 ms 380 KB
#include<bits/stdc++.h>
#define st first
#define nd second
#define pb push_back
#define ppb pop_back
#define ii pair<int,int>
#define ll long long
#define umin(x,y) x=min(x,y)
#define umax(x,y) x=max(x,y)
#define orta ((bas+son)>>1)
#define sz(x) ((int)x.size())
#define all(x) x.begin(),x.end()
#define inf 2000000000
#define N 100005
#define MOD 998244353
using namespace std;

ll ans;
int n;
int a[3][N];
int tot[4];

void solve() {

//	cerr << ans << "\n";

	multiset<int> s;

	for(int i=1;i<=2;i++) {

		for(int j=1;j<=n;j++) {

			a[0][j]+=a[i][j];
			tot[i]+=a[i][j];

		}

	}

	ans+=abs(tot[1]-tot[2])/2;

	for(int i=1;i<=n;i++) {

		for(int j=1;j<=a[0][i]-2;j++) {

			s.insert(i);

		}

	}

	for(int i=1;i<=n;i++) {

		for(int j=a[0][i];j<=1;j++) {

			vector<ii> cd;

			auto pos=s.lower_bound(i);

			if(pos!=s.end()) cd.pb({abs(i-*pos),*pos});

			if(pos!=s.begin()) {

				pos=prev(pos);

				cd.pb({abs(i-*pos),*pos});

			}

			sort(all(cd));

			ans+=cd[0].st;

			s.erase(s.find(cd[0].nd));

		}

	}

}

int dst(ii a,ii b) {

	return abs(a.st-b.st)+abs(a.nd-b.nd);

}

ii fnear(int x,int y) {

	ii res;

	if(y>=2) res.nd=2;
	else res.nd=1;

	if(x>n) res.st=n;
	else if(x<1) res.st=1;
	else res.st=x;

	ans+=dst({x,y},res);

	return res;

}

int main() {

	scanf("%d",&n);

	for(int i=1;i<=n*2;i++) {

		int x,y;

		scanf("%d %d",&x,&y);

		ii near=fnear(x,y);

		a[near.nd][near.st]++;

	}

//	for(int i=1;i<=2;i++,cerr<<"\n") for(int j=1;j<=n;j++) cerr<<a[i][j]<<" ";

	solve();

	printf("%lld",ans);

}

Compilation message

joi2019_ho_t4.cpp: In function 'int main()':
joi2019_ho_t4.cpp:107:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
joi2019_ho_t4.cpp:113:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&x,&y);
   ~~~~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 380 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 380 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 380 KB Output isn't correct
8 Halted 0 ms 0 KB -