競技プログラミングのための精進履歴をブログ形式で残していきます。
目標は AtCoder 水色!
今のレートは茶色です。
本日の精進ツリーは以下のとおり。
精進ツリー
ABC088: C – Takahashi’s Information
ABC088 より、ABC088: C – Takahashi’s Informationを解きました。
難易度は茶色。
提出コードはこちら。
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define SIZE_OF_ARRAY(array) (sizeof(array) / sizeof(array[0]))
using namespace std;
#define MAX 100010
#define NIL -1
using lint = long long int;
using P = pair<lint, lint>;
/*************************************************************************************
NOTE:
・a1が定まれば、そのほかの値もすべて定まる
・a1の取りうる範囲で全探索
*************************************************************************************/
bool check(vector<vector<lint>> G, vector<lint> A, vector<lint> B)
{
rep(i, 3)
{
rep(j, 3)
{
if (G[i][j] != (A[i] + B[j]))
{
return false;
}
}
}
return true;
}
int main()
{
lint N = 3;
lint c;
vector<vector<lint>> G(N);
rep(i, N)
{
rep(j, N)
{
cin >> c;
G[i].push_back(c);
}
}
vector<lint> A(3, 0);
vector<lint> B(3, 0);
for (lint i = -200; i <= 200; i++)
{
A[0] = i;
B[0] = G[0][0] - A[0];
B[1] = G[0][1] - A[0];
B[2] = G[0][2] - A[0];
A[1] = G[1][0] - B[0];
A[2] = G[2][0] - B[0];
if (check(G, A, B))
{
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}
ARC115: B – Plus Matrix
ARC115 より、ARC115: B – Plus Matrixを解きました。
難易度は茶色。
提出コードはこちら。
N = int(input())
C = []
A = [0] * N
B = [0] * N
def check(C, A, B):
for i, c in enumerate(C):
for j, n in enumerate(c):
if n != A[i] + B[j]:
return False
if A[i] < 0 or B[j] < 0:
return False
return True
for i in range(N):
c = list(map(int,input().split()))
C.append(c)
m = pow(10, 9) + 1
for i in range(N):
m = min(m, C[i][0])
for i in range(N):
A[i] = C[i][0] - m
for j in range(N):
B[j] = C[0][j] - A[0]
if check(C, A, B):
print("Yes")
for a in A:
print(a, end=" ")
print("")
for b in B:
print(b, end=" ")
print("")
exit()
print("No")
まとめ
しばらく思うようにパフォーマンス出せていなかったのですが、ARCの緑パフォで少しモチベーションを取り戻せました。
引き続き精進!