답안 #203660

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
203660 2020-02-21T19:01:09 Z ics0503 Naan (JOI19_naan) C++17
24 / 100
7 ms 632 KB
#include<stdio.h>
#include<set>
#include<vector>
using namespace std;
set<long long >people;
struct xy { int x; double y; }L[2121];
double need[2121];
long long v[2121][2121], S[2121][2121];
long long gcd(long long a, long long b) {
	if (b == 0)return a;
	return gcd(b, a%b);
}
vector<int>ans;
int main() {
	long long n, l, i, j; scanf("%lld%lld", &n, &l);
	for (i = 1; i <= n; i++)people.insert(i);
	bool flag = 1;
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= l; j++)scanf("%lld", &v[i][j]);
		long long gg = v[i][1];
		for (j = 1; j <= l; j++)gg = gcd(gg, v[i][j]);
		for (j = 1; j <= l; j++) {
			v[i][j] /= gg; S[i][j] = S[i][j - 1] + v[i][j];
			need[i] += v[i][j];
			if (v[i][j] != v[1][j])flag = 0;
		}
		need[i] /= n;
	}
	if (flag) {
		for (i = 1; i <= n-1; i++) {
			printf("%lld %lld\n", i*l, n);
		}
		for (i = 1; i <= n; i++)printf("%d ", i);
		return 0;
	}
	long long befa = 1;double p = 0;
	for (i = 1; i <= n - 1; i++) {
		long long mnx = 1e9;double mny; long long mnw;
		for (long long who : people) {
			if ((1-p) * v[who][befa] > need[who]) {
				L[who].x = befa;
				L[who].y = p + (need[who] - p*v[who][befa]) / v[who][befa];
			}
			else {
				while ((1 - p) * v[who][befa] + (S[who][L[who].x] - S[who][befa]) <= need[who]) {
					L[who].x++;
				}
				L[who].y = (need[who] - (1 - p) * v[who][befa] - (S[who][L[who].x - 1] - S[who][befa])) / v[who][L[who].x];
			}
			if (mnx > L[who].x || (mnx == L[who].x && mny > L[who].y)) {
				mnx = L[who].x;
				mny = L[who].y;
				mnw = who;
			}
		}
		long long mmnx = 1e9; double mmny; long long mmnw;
		for (long long who : people) if (mnw != who) {
			if (mmnx > L[who].x || (mmnx == L[who].x&&mmny > L[who].y)) {
				mmnx = L[who].x;
				mmny = L[who].y;
				mmnw = who;
			}
		}
		befa = (L[mnw].x+L[mmnw].x)/2, p = (L[mnw].y+L[mmnw].y)/2;
		if ((L[mnw].x + L[mmnw].x) % 2)p += 0.5;
		if (p >= 1)befa++, p = p - 1;
		long long gj = 1e8;
		long long g = befa*gj + p*gj;
		printf("%lld %lld\n", g, gj);
		people.erase(mnw);
		ans.push_back(mnw);
		L[mnw] = { 0, 0 };
	}
	for (int i = 0; i < ans.size(); i++)printf("%d ", ans[i]);
	printf("%lld", *people.begin());
	return 0;
}

Compilation message

naan.cpp: In function 'int main()':
naan.cpp:33:42: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
   for (i = 1; i <= n; i++)printf("%d ", i);
                                          ^
naan.cpp:74:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < ans.size(); i++)printf("%d ", ans[i]);
                  ~~^~~~~~~~~~~~
naan.cpp:15:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  long long n, l, i, j; scanf("%lld%lld", &n, &l);
                        ~~~~~^~~~~~~~~~~~~~~~~~~~
naan.cpp:19:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   for (j = 1; j <= l; j++)scanf("%lld", &v[i][j]);
                           ~~~~~^~~~~~~~~~~~~~~~~~
naan.cpp:64:56: warning: 'mmnw' may be used uninitialized in this function [-Wmaybe-uninitialized]
   befa = (L[mnw].x+L[mmnw].x)/2, p = (L[mnw].y+L[mmnw].y)/2;
                                                ~~~~~~~~^
naan.cpp:58:44: warning: 'mmny' may be used uninitialized in this function [-Wmaybe-uninitialized]
    if (mmnx > L[who].x || (mmnx == L[who].x&&mmny > L[who].y)) {
                           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
naan.cpp:50:43: warning: 'mny' may be used uninitialized in this function [-Wmaybe-uninitialized]
    if (mnx > L[who].x || (mnx == L[who].x && mny > L[who].y)) {
                          ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 376 KB Not a fair distribution.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 5 ms 376 KB Output is correct
3 Correct 5 ms 504 KB Output is correct
4 Correct 6 ms 504 KB Output is correct
5 Correct 6 ms 376 KB Output is correct
6 Correct 5 ms 376 KB Output is correct
7 Correct 5 ms 376 KB Output is correct
8 Correct 5 ms 376 KB Output is correct
9 Correct 6 ms 504 KB Output is correct
10 Correct 7 ms 504 KB Output is correct
11 Correct 5 ms 504 KB Output is correct
12 Correct 5 ms 376 KB Output is correct
13 Correct 5 ms 376 KB Output is correct
14 Correct 6 ms 504 KB Output is correct
15 Correct 6 ms 504 KB Output is correct
16 Correct 6 ms 504 KB Output is correct
17 Correct 6 ms 504 KB Output is correct
18 Correct 7 ms 632 KB Output is correct
19 Correct 6 ms 504 KB Output is correct
20 Correct 6 ms 504 KB Output is correct
21 Correct 6 ms 504 KB Output is correct
22 Correct 6 ms 504 KB Output is correct
23 Correct 5 ms 380 KB Output is correct
24 Correct 6 ms 504 KB Output is correct
25 Correct 5 ms 504 KB Output is correct
26 Correct 5 ms 376 KB Output is correct
27 Correct 6 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 376 KB Not a fair distribution.
2 Halted 0 ms 0 KB -