Educational Codeforces Round 104 (Rated for Div. 2)
A Arena
找规律,标记最小值,凡是大于最小值的数都可以战胜最小值达到 次, 因此只需要计算大于最小值的数的个数即可
#include <iostream>
#include <cstring>
int a[200];
void solve() {
int n, res = 0, minn = 110;
std::cin >> n;
for (int i = 1; i <= n; i++) {
std::cin >> a[i];
if(a[i] < minn)
minn = a[i];
}
for (int i = 1; i <= n; i++) {
if(a[i] > minn) res++;
}
std::cout << res << '\n';
}
int main() {
int t;
std::cin >> t;
while (t--) solve();
} B Cat Cycle
暴力模拟,因为数据量过大会导致超时
#include <iostream>
//brute force
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
int t = 1;
std::cin >> t;
while(t--) {
int n, k;
std::cin >> n >> k;
if(n % 2 == 0) {
std::cout << (k % n == 0 ? n : k % n) << '\n';
continue;
}
int T = 50, a = n, b = 1;
for(int i = 0; i < k-1; ++i) {
//std::cerr << '(' << a << ' ' << b << ")\n";
a--;
if(a < 1) a = n;
b++;
if(b > n) b = 1;
if(b == a) b++;
if(b > n) b = 1;
}
std::cout << b << '\n';
}
} ac代码:
#include <iostream>
using i64 = long long;
void solve() {
i64 n, k;
std::cin >> n >> k;
if(n % 2 == 0) std::cout << (k % n == 0 ? n : k % n) << '\n';
else {
i64 skip = (k - 1) / (n / 2);
std::cout << ((k + skip) % n == 0 ? n : (k + skip) % n) << '\n';
}
}
int main() {
int t;
std::cin >> t;
while(t--) solve();
} 
