ARC043 A 点数変換
問題
コード
C++
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<long long> VLL; typedef vector<pair<int,int>> VP; #define INF (int)(1e9) #define MAXX 1.1529215e+18 #define inf 999999 #define EPS (1e-7) #define MOD (1e9+7) #define rep(i,n) for(int i=0; i<(int)(n);i++) #define REP(i,n) for(int i=1;i<=(int)(n);i++) #define FOR(i,k,n) for(int i=(k);i<(int)(n);i++) #define ALL(a) a.begin(),a.end() #define RALL(a) a.begin(),a.end(),greater<int>() #define ROT(a) a.begin(),a.begin()+1,a.end() #define RROT(a) a.begin(),a.end()-1,a.end() #define PB push_back #define MP make_pair #define PI acos(-1.0) template<typename T1, typename T2> inline bool chmin(T1 &a, T2 b) { if (a > b) { a = b; return 1; } return 0; } template<typename T1, typename T2> inline bool chmax(T1 &a, T2 b) { if (a < b) { a = b; return 1; } return 0; } template<typename T> T gcd(T a, T b) { if (b == 0) return a; return gcd(b, a % b); } /*--------------------------------------------*/ ll N,A,B; int main(){ cin >> N >> A >> B; VLL s(N); rep(i,N) cin >> s[i]; double ave = accumulate(ALL(s),0)/(double)N; auto c = minmax_element(ALL(s)); double cha = *c.second - *c.first; if(cha != 0){ double P = B / cha; double Q = A - P * ave; cout << fixed << setprecision(8) << P << ' ' << Q << endl; }else{ cout << -1 << endl; } }
python
import numpy as np N,A,B = map(int,input().split()) s = [int(input()) for i in range(N)] ave = np.mean(s) cha = np.max(s) - np.min(s) if cha != 0: P = B / cha Q = A - P * ave print(P,Q) else: print(-1)
WAになったコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<long long> VLL; typedef vector<pair<int,int>> VP; #define INF (int)(1e9) #define MAXX 1.1529215e+18 #define inf 999999 #define EPS (1e-7) #define MOD (1e9+7) #define rep(i,n) for(int i=0; i<(int)(n);i++) #define REP(i,n) for(int i=1;i<=(int)(n);i++) #define FOR(i,k,n) for(int i=(k);i<(int)(n);i++) #define ALL(a) a.begin(),a.end() #define RALL(a) a.begin(),a.end(),greater<int>() #define ROT(a) a.begin(),a.begin()+1,a.end() #define RROT(a) a.begin(),a.end()-1,a.end() #define PB push_back #define MP make_pair #define PI acos(-1.0) template<typename T1, typename T2> inline bool chmin(T1 &a, T2 b) { if (a > b) { a = b; return 1; } return 0; } template<typename T1, typename T2> inline bool chmax(T1 &a, T2 b) { if (a < b) { a = b; return 1; } return 0; } template<typename T> T gcd(T a, T b) { if (b == 0) return a; return gcd(b, a % b); } /*--------------------------------------------*/ ll N,A,B; int main(){ cin >> N >> A >> B; VLL s(N); rep(i,N) cin >> s[i]; double ave = accumulate(ALL(s),0)/(double)N; auto c = minmax_element(ALL(s)); double cha = *c.second - *c.first; if(cha != 0){ double P = B / cha; double Q = A - P * ave; cout << fixed << setprecision(8) << P << ' ' << Q << endl; }else{ cout << -1 << endl; } }
WAコードの問題点
accumulate
の第3変数が0LL
ではなく0
になってしまっていた。