ARC043 A 点数変換

問題

atcoder.jp

コード

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になってしまっていた。