제출 #648908

#제출 시각아이디문제언어결과실행 시간메모리
648908ymm커다란 상품 (IOI17_prize)C++17
0 / 100
1 ms208 KiB
#include "prize.h"
#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x)
typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::pair<ll , ll > pll;
using namespace std;

static const int N = 200'010;
static int cnt[N];

static int test(int *a, int n)
{
	fill(cnt, cnt+n, 0);
	int pos = -1;
	int mx = 1;
	Loop (i,0,n) {
		if (a[i] > n || 1 > a[i])
			return -1;
		if (a[i] > mx)
			mx = a[i];
		if (a[i] == 1)
			pos = i;
		cnt[a[i]-1]++;
	}
	if (cnt[0] != 1)
		return -1;
	Loop (i,0,mx-1)
		if ((ll)cnt[i] * cnt[i] >= cnt[i+1])
			return -1;
	return pos;
}

static bool test_is_vector(void *add, int n)
{
	ll *p = (ll *)add;
	ll len = p[1] - p[0];
	ll cap = p[2] - p[0];
	if (len != n*sizeof(int))
		return 0;
	if (len > cap)
		return 0;
	//if ((cap & -cap) != cap) // cap = 2^k
	//	return 0;
	return 1;
}

int find_best(int n)
{
	ll dard = 0;
	bool find_vec = 0;
	for (void *add = &dard;; add += 8) {
		if (!test_is_vector(add, n))
			continue;
		if (!find_vec) {
			find_vec = 1;
			continue;
		}
		return -2;
		int tmp = test(*(int **)add, n);
		if (tmp != -1)
			return tmp;
	}
	return -(1 + find_vec);
}

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

prize.cpp: In function 'bool test_is_vector(void*, int)':
prize.cpp:40:10: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'long unsigned int' [-Wsign-compare]
   40 |  if (len != n*sizeof(int))
      |      ~~~~^~~~~~~~~~~~~~~~
prize.cpp: In function 'int find_best(int)':
prize.cpp:53:31: warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
   53 |  for (void *add = &dard;; add += 8) {
      |                           ~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...