제출 #1345959

#제출 시각아이디문제언어결과실행 시간메모리
1345959marcogambaro3개의 봉우리 (IOI25_triples)C++20
40 / 100
2094 ms1960 KiB
#include "triples.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define all(x) x.begin(),x.end()
#define rall(x) x.begin(),x.end()
#ifdef MARCO
#define infof(str,...) do{fprintf(stderr, str"\n", ##__VA_ARGS__);}while(0);
#define infor(str,...) do{fprintf(stderr, str, ##__VA_ARGS__);}while(0);
#else
#define infof(str,...)
#define infor(str,...)
#endif


long long count_triples(std::vector<int> H) {
	ll ans = 0;
	int N = H.size();

	for(int i=0; i<N; i++) {
		if(i - H[i] >= 0) {
			int j = i - H[i];
			if(j + H[j] < i) {
				int k1 = j + H[j];
				if(k1 + H[k1] == i) 
				ans++;
				int k2 = i - H[j];
				if(k2 != k1 && j + H[k2] == k2) 
				ans++;
			}
		}

		if(i + H[i] < N) {
			int j = i + H[i];
			if(j - H[j] > i) {
				int k1 = j - H[j];
				if(k1 - H[k1] == i) 
					ans++;
				int k2 = i + H[j];
				if(k2 != k1 && k2 + H[k2] == j)
				 	ans++;
			}
		}

		for(int j = max(0, i - H[i]); j < i; j++) {
			int k = j + H[i];
			if(k >= N) continue;

			if(j + H[j] == i && k - H[k] == i) {
				ans++;
				continue;
			}
			if(j + H[k] == i && k - H[j] == i) {
				ans++;
				continue;
			}
		}
	}

	return ans;
}

std::vector<int> construct_range(int M, int K) {

}


#ifdef MARCO
namespace {

void run_part1() {
  int N;
  assert(1 == scanf("%d", &N));
  std::vector<int> H(N);
  for (int i = 0; i < N; i++)
    assert(1 == scanf("%d", &H[i]));
  fclose(stdin);

  long long T = count_triples(H);

  printf("%lld\n", T);
  fclose(stdout);
}

void run_part2() {
  int M, K;
  assert(2 == scanf("%d %d", &M, &K));
  fclose(stdin);

  std::vector<int> H = construct_range(M, K);

  int N = H.size();
  printf("%d\n", N);
  for (int i = 0; i < N; i++)
    printf("%d%c", H[i], " \n"[i + 1 == N]);
  fclose(stdout);
}

} // namespace

int main() {
  int part;
  assert(1 == scanf("%d", &part));
  if (part == 1)
    run_part1();
  else if (part == 2)
    run_part2();

  return 0;
}
#endif

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

triples.cpp: In function 'std::vector<int> construct_range(int, int)':
triples.cpp:66:1: warning: no return statement in function returning non-void [-Wreturn-type]
   66 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...