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();
}
全部评论

相关推荐

牛客62533758...:华为不卡双非,而是卡院校hhhh
点赞 评论 收藏
分享
04-17 18:34
中山大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务