编程语言   发布时间:2022-06-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Codeforces Round #791 (Div. 2) A-C大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Codeforces Round #791 (Div. 2) A-C

A

题目

https://codeforces.com/contest/1679/problem/A

题解

思路

知识点:数学,暴力,贪心。

考虑 (n%6)(n%4) 的余数情况。

时间复杂度 (O(1))

空间复杂度 (O(1))

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        long long n;
        cin>>n;
        if(n<4 || n&1) cout<<-1<<'n';
        else{
            long long d = n/6,r = n%6;
            cout<<d + (r != 0)<<' ';
            cout<<n/4<<'n';
        }
    }
    return 0;
}

B

题目

https://codeforces.com/contest/1679/problem/B

题解

思路

知识点:数据结构,模拟。

如果执行操作 (2) ,那么所有数都变成 (x) ,我们可以理解为把数组清空了,但 (sum) 的基础值是 (n*x) ,下次单点修改时只需要知道清空之后,这个元素有没有被修改过,即在数组中是否存在,分别做不同的处理。可以用 (map) 维护下标与值的映射。(也可以记录上次整体修改的访问时间,用一个数组保存每个位置在哪次整体修改之后修改的访问时间)

时间复杂度 (O(n+q))

空间复杂度 (O(n))

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,q;
    cin>>n>>q;
    map<int,int> a;
    long long sum = 0;
    for(int i = 1;i<=n;i++) cin>>a[i],sum+=a[i];
    int pre = 0;
    while(q--){
        int t;
        cin>>t;
        if(t == 1){
            int i,x;
            cin>>i>>x;
            if(a.count(i)) sum += x-a[i];
            else sum = sum - pre + x;
            a[i] = x;
            cout<<sum<<'n';
        }
        else if(t == 2){
            int x;
            cin>>x;
            sum = 1LL * n * x;
            pre = x;
            a.clear();
            cout<<sum<<'n';
        }
    }
    return 0;
}

C

题目

https://codeforces.com/contest/1679/problem/C

题解

思路

知识点:树状数组(或者线段树),模拟。

如果一个区块被攻击,那么肯定对应的所有行或者所有列都存在棋子,分别计算存在棋子的行和列的数量,行或列有一个满足与区块行或列相等,那么区块所有格子都能被攻击到。用树状数组的单点修改和区间和维护行和列的棋子存在状态和计算,用数组维护各行和列的当前棋子数量辅助树状数组的修改。

用线段树也可以,常数比较大。

(虽然但是,我还不会,哈哈哈哈,抄佬板子,也用不好,焯)

时间复杂度 (O(qlogn))

空间复杂度 (O(n))

代码

#include <bits/stdc++.h>

using namespace std;

template <typename T>
struct Fenwick{
    const int n;
    vector<T> a;
    Fenwick(int n):n(n),a(n){}
    void add(int x,T v) {
        for (int i = x+1;i<=n;i += i&-i){
            a[i-1] += v;
        }
    }
    T sum(int x) {
        T ans = 0;
        for (int i = x;i>0;i -= i&-i){
            ans += a[i-1];
        }
        return ans;
    }
    T rangeSum(int l,int r){
        return sum(r) - sum(l);
    }
};

int row[100007],col[100007];

int main(){
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,q;
    cin>>n>>q;
    Fenwick<int> rowb(n+7),colb(n+7);
    while(q--){
        int t;
        cin>>t;
        if(t == 1){
            int x,y;
            cin>>x>>y;
            row[x]++;
            col[y]++;
            if(row[x] == 1) rowb.add(x,1);
            if(col[y] == 1) colb.add(y,1);
        }
        else if(t == 2){
            int x,y;
            cin>>x>>y;
            row[x]--;
            col[y]--;
            if(row[x] == 0) rowb.add(x,-1);
            if(col[y] == 0) colb.add(y,-1);
        }
        else if(t == 3){
            int x1,x2,y1,y2;
            cin>>x1>>y1>>x2>>y2;
            if(rowb.rangeSum(x1,x2+1) == x2-x1+1 || colb.rangeSum(y1,y2+1) == y2-y1+1) cout<<"Yes"<<'n';
            else cout<<"No"<<'n';
        }
    }
    return 0;
}

大佬总结

以上是大佬教程为你收集整理的Codeforces Round #791 (Div. 2) A-C全部内容,希望文章能够帮你解决Codeforces Round #791 (Div. 2) A-C所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: