atcorderのabc194回のc問題がtleになります。https://atcoder.jp/contests/abc194/tasks/abc194_c
調べてみたところテストケースのsame0,same1,same3が引っかかっているようです。
テストケース
c++
1#include <bits/stdc++.h> 2using namespace std; 3using ll = long long; 4template <typename T> bool chmax(T &a, const T &b) { if(a < b) {a = b; return true;} return false; } 5template <typename T> bool chmin(T &a, const T &b) { if(a > b) {a = b; return true;} return false; } 6const long long INF=1LL<<60; 7#define rep(i, n) for (int i = 0; i < (int)(n); i++) 8 9int main(){ 10 ll n; cin >> n; 11 ll a[401]={0}; 12 ll ans=0; 13 ll numbers[n+1]; 14 rep(i,n){ 15 cin >> numbers[i]; 16 } 17 rep(i,n){ 18 ll b=numbers[i]; 19 if(a[b+200]){ 20 ans+=a[b+200]; 21 }else{ 22 ll sub=0; 23 rep(j,n){ 24 sub+=(b-numbers[j])*(b-numbers[j]); 25 } 26 a[b+200]=sub; 27 ans+=sub; 28 } 29 } 30 cout << ans/2 <<endl; 31}
上が僕の書いたもので、配列a に1度答えを出した物を入れておき、2回目以降はその配列から答えを取り出すようにしています。僕はここの処理時間が長いのではないかと勝手に考えていますがどうなのでしょうか?どこが原因で時間がかかっているのか教えていただきたいです。お願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/13 06:56