https://atcoder.jp/contests/abc063/tasks/arc075_a
以下はこちらの問題を解いた自分のコードです。入力例を手元で全部実行したところ全部うまくいったので提出したのですがWAとなってしまいました。cout
の位置を変えてみたりしましたがダメでした。よろしくお願い致します。
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; vector<int> a(n); for (int i=0;i<n;++i) cin >> a[i]; sort(a.begin(),a.end()); int ans=0; for (int i=0;i<n;++i){ ans+=a[i]; } if (ans%10!=0) cout << ans << endl; else { for (int i=0;i<n;++i){ while (ans%10==0) { ans-=a[i]; break; } } cout << ans << endl; } }
> よろしくお願い致します。
なにを?
すいません、自分のコードのどこが間違えているかということです。
n個の得点 S1~SN から 合計が10の倍数にならないような組み合わせの最大値を求めよってことですよね?
あなたのコードはそうなってます? 単に総計から一個ずつさっぴいてるだけに見える。
僕はansが10の倍数だったら(else以降)、点数をソートしてansが10の倍数じゃなくなるまで(ansが10の倍数である間)点数の小さいものから差っ引いていくと考えましたがそれを反映したコードになっていないでしょうか?
>質問者cunweiさん
epistemeさんが「単に総計から一個ずつさっぴいてるだけ」と書かれているのは、cunweiさんの「ansが10の倍数じゃなくなるまで(ansが10の倍数である間)点数の小さいものから差っ引いていく」ことを示されています。そのようなコードにはなっていますが、単純にansが10の倍数じゃなくなるまで引いていってしまったら、たとえばNが5で、10 20 30 40 55 と言う並びだった場合、全部引いてしまいますね。それじゃダメですよね。
全部足して10nでなければそれでよし、
全部足して10nになっちゃったら"10の倍数でない最小得点"をひとつだけさっ引けばいいんじゃないか?
>dodox86さん
そのdodox86さんがご提示下さった例の和は155なので僕のコードのif (ans%10!=0) cout << ans << endl;のところでちゃんと155と出力されないですか?
>epistemeさん
あ、ひとつだけでいいのですね。そうするとぼくのコードは大袈裟すぎますね、、。
ひとつさっ引けば10nじゃなくなるよね?
>cunweiさん
> そのdodox86さんがご提示下さった例の和は155なので僕のコードのif (ans%10!=0) cout << ans << endl;のところでちゃんと155と出力されないですか?
大変失礼しました。そうですね。そのパターンはOKでした。私の例が間違っていて、悪かったです。
N=5 {10, 10, 20, 25, 35} のようなパターンがNG、です。まぁもう原因はお分かりになったと思いますが。
お二方ともありがとうございました!
あなたの回答
tips
プレビュー