少し暇だったので参加してみました,が,まともに解けていません.コンテスト中にNo.191を解いて,終了後に放送を聞いてたら一瞬「え?」ってなった解法があって,書いたら通ったのがNo.192でした.
No.191 供託金
概要
市議会議員選挙が行われる.その際,立候補者は供託金を30万円供託所に供託する必要がある.全体の有効投票総数の内,1/10以下の投票数を取った立候補者は30万円を市に全額納めなければならず,そうでない立候補者は30万円が全額返還される.N人が出馬して各々Ci(1≦i≦N)の投票数を得た.このときの,納められる供託金の全額を求めよ.最後に改行を入れる.
解法
各投票数を全て足して10で割り,各投票数がそれ以下なら1カウントする.
#include <bits/stdc++.h> #include <cstdio> using namespace std; int main() { int n,sum=0; int a[1000000]; cin>>n; for(int i=0;i<n;i++){ scanf("%d",&a[i]); sum=sum+a[i]; } int vas=0; int cn=0; vas=sum/10; for(int i=0;i<n;i++){ if(a[i]<=vas){cn=cn+30;} } printf("%d\n",cn); return 0; }
感想
ここまでは良かったが次で書けなくなって詰んでしまった.
No.192 合成数
概要
整数Nが与えられる.ここで,N−100以上N+100以下になる合成数を1つ見つける.ここで、合成数は1と自分以外の正の約数を持つ正整数のことをいう.
制約
入力した値Nに関して,自身が合成数であった場合,それを出力しても良い.
解法
これが問題で,自分は最初エラトステネスの篩を用いて素数判定を行う過程で合成数の判定を出せばいいのでは,と思っていたけれどコードが書けなかった.コンテスト終了後の放送を聞いてて,コメントで素数かどうか判定してから+3すると云々〜と流れたので,「え?あれ?」ってなって書いたら,通ってしまって非常に悔しかった.
nが2以外かつ偶数である時はそのまま出力,そうでない時は+3して再度偶奇判定,それでもダメならまた+3して出力.
#include <iostream> using namespace std; int main() { int n; cin>>n; if((n!=2)&&(n%2==0)){cout<<n<<endl;}else{ n=n+3; if(n%2==0){cout<<n<<endl;}else{ n=n+3; cout<<n<<endl; } } return 0; }
感想
ACした後に,「あれ,そういやこれどっかでやったなぁ」となって,AtCoderのやつかなんかでやったのを思い出して,すごく辛かった.でもこれで次に関連問題が出た時は,速攻で解けるんじゃないかと思った.
総合的な感想
もっと問題解こうか(^...^) <どうせNo.193以降は解いてないだろ?