首页 > 其他分享 >Codeforces Round 962 (Div. 3) 题解

Codeforces Round 962 (Div. 3) 题解

时间:2024-07-27 10:41:15浏览次数:14  
标签:count 26 int 题解 void cin Codeforces -- Div

A. Legs https://codeforces.com/contest/1996/problem/A

翻译:

农夫约翰的农场又迎来了美好的一天。

农夫约翰来到农场后,数了数 n条腿。众所周知,农场里只住着鸡和牛,一只鸡有 2 条腿,而一头牛有 4 条腿。

假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?

思路

求最少有几只动物,n先除4再除2就行。

void solve() {
    cin >> n;
    int k = n / 4;
    n -= k * 4;
    int p = n / 2;
    cout << p + k << "\n";
}

B. Scale https://codeforces.com/contest/1996/problem/B

翻译

就是说,给你一个n*n的01网格,网格中每个01块都是相同的长宽,让你缩小k倍,例如:
8 2
00001111
00001111
00001111 --> 0011
00001111 --> 0011
11110000 --> 1100
11110000 --> 1100
11110000

思路

我们只需要从(1,1)位置开始i和j加k输出就可以,自己模拟几下就找到规律

char mpp[N][N];
void solve() {
    int n, k;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> mpp[i][j];
        }
    }

    for (int i = 1; i <= n; i += k) {
        for (int j = 1; j <= n; j += k) {
            cout << mpp[i][j];
        }
        cout << "\n";
    }
}

题目 C. Sort https://codeforces.com/contest/1996/problem/C

翻译

就是说,给你两个长度为n的字符串,询问q次。
每次给出l,r的区间让你判断区间字符串是否匹配,不匹配就得去修改a的字符,需要修改几次才能让两个区间相同

思路

首先需要判断l和r大小,确定循环;
统计一下区间字符串中字符不同的数量,输出即可。
一开始用map来做,后来超时了,就做了优化。

const int N = 2e5 + 10;
int a_count[26][N], b_count[26][N];

void Count(const string& a, const string& b, int n) {
    for (int i = 0; i < 26; ++i) {
        a_count[i][0] = b_count[i][0] = 0;
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < 26; ++j) {
            a_count[j][i + 1] = a_count[j][i] + (a[i] == 'a' + j);
            b_count[j][i + 1] = b_count[j][i] + (b[i] == 'a' + j);
        }
    }
}

int get(int l, int r, int n) {
    int cnt = 0;
    for (int i = 0; i < 26; ++i) {
        int ap = a_count[i][r] - a_count[i][l - 1];
        int bp = b_count[i][r] - b_count[i][l - 1];
        cnt += max(0, bp - ap);
    }
    return cnt;
}

void solve() {
    int n, k;
    cin >> n >> k;
    string a, b;
    cin >> a >> b;
    Count(a, b, n);
    while (k--) {
        int l, r;
        cin >> l >> r;
        if (l > r) cout << get(1, r, n) + get(l, n, n) << "\n";
        else cout << get(l, r, n) << "\n";
    }
}

超时版

const int N = 2e5 + 10;
map<char, int>p;
void solve() {
    int n, k;
    cin >> n >> k;
    string a, b;
    cin >> a >> b;
    while (k--) {
        int l, r;
        cin >> l >> r;
        p.clear();
        if (l <= r) {
            for (int i = l - 1; i <= r - 1; i++)
                p[b[i]]++, p[a[i]]--;
        }
        else {
            for (int i = l - 1; i <= n - 1; i++)
                p[b[i]]++, p[a[i]]--;
            for (int i = 0; i <= l - 1; i++)
                p[b[i]]++, p[a[i]]--;
        }
        int cnt = 0;
        for (char i = 'a'; i <= 'z'; i++)
            if (p[i] > 0) cnt += p[i];
        cout << cnt << "\n";
    }
}

标签:count,26,int,题解,void,cin,Codeforces,--,Div
From: https://www.cnblogs.com/kkk117/p/18326698

相关文章

  • Codeforces Round 962 (Div. 3) 补题记录(A~G)
    这场Div.3难度高于平时。A#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=500100;inta[N];signedmain(){intT;scanf("%lld",&T);while(T--){intn;scanf("%lld",......
  • stata 代码实现熵值法计算 含常见问题解答
    适用:面板数据均可stata版本:无要求例如,使用了一个10年的省级面板数据,含15个指标,现在来计算各地区的熵值法得分。其中,x1x2x3x4x6x7x8x9x11x12x13x14x15是正向指标;而x5x10是负向指标。1.定义面板,定义指标的正负。tssetidyearglobalxlist1"x1x2x3x4x6x......
  • Codeforces Round 961
    省流:运气好没有掉分)B2Bonquet(HardVertion)(CF1995B2)事实上B1都写挂了(尖叫)处理花瓣数相差不超过1的花,可以用map存储每种花的数量,顺序遍历即可(其实是不想排序统计,好麻烦);那么如何计算最终答案呢。。。此处省略我赛时乱七八糟的一堆复杂做法,比较简单的写法是先找到一个可行的......
  • Codeforces 913 div3 A-G
    A题意分析把给定的坐标的那一行和那一列的其他所有坐标都输出来C++代码#include<iostream>usingnamespacestd;intmain(){ intt; cin>>t; while(t--){ strings; cin>>s; for(inti=1;i<=8;i++){ if(i+'0'!=s[1])cout<<s[0]<<i<<end......
  • CodeForces 1883A Morning
    题目链接:CodeForces1883A【Morning】思路    模拟,特判当密码中的某个元素为0时,用10减去当前光标的位置,并修改光标的位置为当前元素,再操作依次显示当前元素。对于其他情况则直接使用光标的位置减去目标位置,修改光标位置为当前元素,然后再操作一次显示当前元素。代码#......
  • CF585F Digits of Number Pi 题解
    Description给定长度为\(n\)的数字串\(s\)和长度为\(d\)的不含前导零的数字串\(x,y(x\ley)\)。求存在长度至少为\(\left\lfloor\frac{d}{2}\right\rfloor\)的子串是\(s\)的子串的数字串\(t\in[x,y]\)的数量。\(n\le10^3\),\(d\le50\),答案对\(10^9+7\)取......
  • CodeForces 1883B Chemistry
    题目链接:CodeForces1883B【Chemistry】思路    判断最多删去k个字符后剩下的部分为回文字符串,所以优先删除将个数为奇数个的相同字符删为偶数,当最后留下的字符串中,奇数个数的相同字符种类小于等于1时才会是回文字符串,如:aaabbbccc,此时个数为奇数的相同字符种类有三种,分......
  • CF578E Walking! 题解
    Description给定一个长度为\(n\)的只包含L,R的字符串\(s\)。构造一个\(n\)排列\(p\)满足\(s[p_i]\nes[p_{i+1}](1\lei<n)\)。最小化\(p\)中\(p_i>p_{i+1}(1\lei<n)\)的数量。\(n\le10^5\),数据保证有解。Solution考虑把\(p\)中的每个极长连......
  • 小信小友逛庙会 题解
    题目id:9774题目描述小信与小友相约逛庙会。但是庙会人很多,他们走散了。庙会能表示成\(n×m\)的矩阵,小信在'\(C\)',小友在'\(D\)','\(.\)'表示能走,'#'表示店铺(也就是不能走)。每分钟,小信可以往\(8\)个方向移动一格,而小友可以移动一次或者两次,每次可以往\(4\)个方向(上下左右)移动一......
  • 开心消消乐 题解
    题目id:8578题目描述\(A\)酱最近在玩开心消消乐,由于是异次元的游戏,所以规则可能和地球上的有所不同。开心消消乐是一个在大圆环上进行的游戏,环上有若干个宝石,每颗宝石都有自己的积分,由于消消乐是一个三消游戏,我们每次可以挑选其中一个宝石消去,消去宝石的积分为他的积分和左右相......