Official
B - Alcoholic Editorial by kyopro_friends
\(i\) 番目のお酒に含まれているアルコールの量は \(V_i*P_i/100\) です。前から順にこれらの和を計算していき、初めて \(X\) を超えるところを出力すれば良いです。
しかし、浮動小数点数の演算は一般に誤差を含みます。例えば、以下の入力の正しい答えは -1
ですが、実装と環境によっては 3
を出力する場合があります。
3 13
30 13
35 13
35 13
このような問題を避ける最も簡単な方法は、整数のみで計算できるように適切な式変形を行うことです。
今回の場合、\(V_1*P_1/100+\ldots >X\) かどうかを判定したいので、両辺に \(100\) を掛け \(V_1*P_1+\ldots > X*100\) とすることで、整数のみで計算できます。
実装例(C)
#include<stdio.h>
int main(){
int n,x;
scanf("%d%d",&n,&x);
int sum=0;
for(int i=0;i<n;i++){
int v,p;
scanf("%d%d",&v,&p);
sum+=v*p;
if(sum>x*100){
printf("%d\n",i+1);
return 0;
}
}
puts("-1");
}
実装例(Python)
N,X = map(int,input().split())
s = 0
for i in range(N):
v,p = map(int,input().split())
s += v*p
if s > X*100:
print(i+1)
exit()
print(-1)
posted:
last update: