제출 #425007

#제출 시각아이디문제언어결과실행 시간메모리
425007InternetPerson10말 (IOI15_horses)C++17
17 / 100
1570 ms14156 KiB
#include "horses.h"
#include <bits/stdc++.h>
typedef long long ll;

using namespace std;

const ll MOD = 1000000007;

vector<ll> x, y;

ll modpow(int n, int e = MOD-2) {
	if(e == 0) return 1;
	if(e == 1) return n;
	ll xx = modpow(n, e/2);
	xx *= xx;
	xx %= MOD;
	if(e%2) {
		xx *= n;
		xx %= MOD;
	}
	return xx;
}

ll getBest() {
	ll horses = 1;
	ll best = 1;
	ll g = 1, k = 1;
	for(int i = 0; i < x.size(); i++) {
		horses *= x[i]*y[i];
		if(i > 0) {
			horses %= MOD;
			horses *= modpow(y[i-1]);
		}
		horses %= MOD;
		k *= x[i];
		if(k > g) {
			g = y[i];
			k = 1;
			best = horses;
		}
		else if(k*y[i] > g) {
			g = y[i];
			k = 1;
			best = horses;
		}
	}
	return best%MOD;
}

int init(int N, int X[], int Y[]) {
	x.resize(N);
	y.resize(N);
	for(int i = 0; i < N; i++) {
		x[i] = X[i]; y[i] = Y[i];
	}
	return (int)getBest();
}

int updateX(int pos, int val) {	
	x[pos] = val;
	return (int)getBest();
}

int updateY(int pos, int val) {
	y[pos] = val;
	return (int)getBest();
}

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

horses.cpp: In function 'll getBest()':
horses.cpp:28:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |  for(int i = 0; i < x.size(); i++) {
      |                 ~~^~~~~~~~~~
horses.cpp:32:27: warning: conversion from '__gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type' {aka 'long long int'} to 'int' may change value [-Wconversion]
   32 |    horses *= modpow(y[i-1]);
      |                           ^
#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...