チームを分割する
すべてのグループ化状況を列挙し、戦闘前後の2つのグループの合計待機時間の差の最小値を見つけ、接頭辞と配列を使用して合計の計算を最適化します
#include <iostream>
#include <cmath>
using namespace std;
const int N = 1e5+10;
int n, a[N], s[N], sum, minn = 1e9;;
int main(){
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
s[i] = s[i-1] + a[i];
sum += a[i];
}
for (int i = 1; i <= n-1; i ++) {
minn = min(minn, abs(sum - s[i] - s[i]));
}
cout << minn;
return 0;
}
カンター
Cantorウォッチを45°回転させて次のピラミッドの図を取得し、その図を観察してコード
(1、1)(2、1)(1、2)(3、1)(2、2)(1、 3)(4、1)(3、2)(2、3)(1、4)(5、1)(4、2)(3、3)(2、4)(1、5)\ begin(収集)(1,1)\\(2,1)\(1,2)\\(3,1)\(2,2)\(1,3)\\(4,1)\(3、 2)\(2,3)\(1,4)\\(5,1)\(4,2)\(3,3)\(2,4)\(1,5)\\ \ end(集めた)(1 、1 )(2 、1 )(1 、 2 )(3 、1 )(2 、 2 )(1 、 3 )(4 、1 )(3 、 2 )(2 、 3 )(1 、 4 )(5 、1 )(4 、 2 )(3 、 3 )(2 、 4 )(1 、 5 )
#include <iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
int t = a+b-2, sum = 0;
for (int i = 1; i <= t; i ++) {
sum += i;
}
if (t%2 == 0) sum = sum + b;
else sum = sum + a;
cout << sum ;
return 0;
}
ページ番号を探す
#include <iostream>
using namespace std;
int a, k, cnt;
int main(){
cin >> a >> k;
int i = 0;
while (true) {
i ++;
int t = i;
while (t) {
if (t%10 == a) {
cnt ++;
if (cnt == k) {
cout << i << endl;
return 0;
}
}
t /= 10;
}
}
return 0;
}
トリプルプレイ
#include <iostream>
#include <cmath>
using namespace std;
int n, x;
int a, b, c;
int main(){
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> x;
if (x%3==0) a++;
if (x%3==1) b++;
if (x%3==2) c++;
}
cout << min(b,c) + a/2;
return 0;
}
還元シーケンス
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
const int N = 1e5+10;
int n, k, x, p[N], ans[N];
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i ++) {
cin >> x;
p[x] = i;
}
for (int i = 1; i <= n; i ++) {
int t = p[i];
for (int j = 1; j < k; j ++) {
t = p[t];
}
ans[t] = i;
}
for (int i = 1; i <= n; i ++) {
cout << ans[i] << ' ';
}
return 0;
}