B
N 枚のカードがあります. i 枚目のカードには, ai という数が書かれています.
Alice と Bob は, これらのカードを使ってゲームを行います. ゲームでは, Alice と Bob が交互に 1 枚ずつカードを取っていきます. Alice が先にカードを取ります.
2 人がすべてのカードを取ったときゲームは終了し, 取ったカードの数の合計がその人の得点になります. 2 人とも自分の得点を最大化するように最適な戦略を取った時, Alice は Bob より何点多く取るか求めてください.
kisikan!!
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
int N;
int a;
vector<int>V;
cin >> N;
for (int i = 0; i < N;++i) {
cin >> a;
V.push_back(a);
}
sort(V.begin(), V.end(),greater<int>());
int Asum = 0;
int Bsum = 0;
for (int i = 0; i < N; i += 2) {
Asum += V[i];
}
for (int i = 1; i< N; i += 2) {
Bsum += V[i];
}
cout << Asum - Bsum << endl;
return 0;
}
vectorは便利。
C
3×3 のグリッドがあります. 上から i 番目で左から j 番目のマスを (i,j) で表すとき, マス (i,j) には数 ci,j が書かれています.
高橋君によると, 整数 a1,a2,a3,b1,b2,b3 の値が決まっており, マス (i,j) には数 ai+bj が書かれているらしいです.
高橋君の情報が正しいか判定しなさい.
制約
ci,j (1≤i≤3,1≤j≤3) は 0 以上 100 以下の整数
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<math.h>
#include<queue>
#include<deque>
#include<stack>
#include<cstdio>
#include<utility>
#include<set>
#include<list>
#include<cmath>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int INF = 1e9;
int main() {
int c[3][3];
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> c[i][j];
}
}
bool can = false;
if (c[1][0] - c[0][0] == c[1][1] - c[0][1]&&c[1][1]-c[0][1] == c[1][2] - c[0][2]
&& c[2][0] - c[1][0] == c[2][1] - c[1][1] && c[2][1]-c[1][1] == c[2][2] - c[1][2]
&& c[0][1] - c[0][0] == c[1][1] - c[1][0] &&c[1][1]-c[1][0] == c[2][1] - c[2][0]
&& c[0][2] - c[0][1] == c[1][2] - c[1][1] &&c[1][2]-c[1][1] == c[2][2] - c[2][1]) {
can = true;
}
if (can)
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;
using ll = long long;
#define INF 1e9
int main() {
int c[3][3];
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> c[i][j];
}
}
int a[3], b[3];
bool can = true;;
for (int i = 0; i < 3; ++i) {
a[i] = c[i][0] - b[0];
}
for (int i = 0; i < 3; ++i) {
b[i] = c[0][i] - a[0];
}
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (c[i][j] != a[i] + b[j])
can = false;
}
}
if (can)
cout << "Yes";
else
cout << "No";
return 0;
}
スマートな解法。AC。