すぬさんの競プロノート(1)
- プログラミングは精神労働だけど,筋トレみたいに習慣づけることで普段のおしごとも楽になるのではないか
- 昔情報オリンピックにでたことがあって,ギッタギタにボコされてそこから全く成長していない
- 今からでも遅くないんじゃね??
- コツコツ毎日やった成果を残しておこう!
とりあえず方針
とりあえずAtCoderの問題をひったすら解き続けることにする.簡単な問題でも躊躇なく数を踏むことにしよう.ちなみに今のレートは800ぐらい.目標はとりあえず青色に行くこと
さっそくきょうの問題から
ABC088 Takahashi's Information
3x3の行列は,それぞれ(a_i + b_j)のかたちで表されている.a_1を決めてしまえば,その他の値(a2,a3,b1,b2,b3)の候補がきまるので,それらと行列の値を比べて1つでも一致していればYes,そうでなければNo.
void solve(std::vector<std::vector<long long> > c){
for(int a0 = 0; a0 <=100; a0++){
vector < LL > a(3);
vector < LL > b(3);
a[0]=a0;
b[0] = c[0][0]-a[0];
b[1] = c[0][1]-a[0];
b[2] = c[0][2]-a[0];
a[1] = c[1][1]-b[1];
a[2] = c[2][1]-b[1];
bool flag = true;
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(c[i][j] != a[i]+b[j])flag=false;
}
}
if(flag){
cout<<YES<<endl;return;
}
}
cout<<NO<<endl;
return;
}
int main(){
std::vector<std::vector<long long> > c(3, std::vector<long long>(3));
for(int i = 0 ; i < 3 ; i++){
for(int j = 0 ; j < 3 ; j++){
scanf("%lld",&c[i][j]);
}
}
solve(std::move(c));
return 0;
}
行ごとに引き算したりしても良かったけど,0から100までの整数という範囲設定があったので,全探索しちゃった.