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

Codeforces Round 962 (Div. 3) 题解 A-F

时间:2024-07-28 15:59:18浏览次数:14  
标签:count int 题解 ll Codeforces long cin Div include

A. Legs

Problem - A - Codeforces

1.1翻译

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

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

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


1.2思路

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

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

B. Scale


​​​​​​Problem - B - Codeforces
 

2.1翻译 


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

2.2思路


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

2.3代码
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


  Problem - C - Codeforces
 

3.1翻译


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


3.2思路


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

3.3代码
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";
    }
}

3.4超时版
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";
    }
}

D. Fun


Problem - D - Codeforces


4.1翻译


给定两个整数 n 和 x ,求 ab+ac+bc≤n 和 a+b+c≤x 的个正整数的三元组( a,b,c)的个数。
注意顺序问题(例如 ( 1,1,2 ) 和 ( 1,2,1 ) 被视为不同), a , b , c 必须严格大于 0 。


4.2思路 


由第一个式子可知,a*b<=n,所以b有大约有 nlogn个选择,可以循环ab求解
由两个式子可推导出c ≤(n−ab)/(a+b)和  c ≤ x−a−b,我们只需要选择范围最小的那一个即可。

4.3代码
#define ll long long

void solve() {
    int n, k;
    cin >> n >> k;
    ll c = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; i * j <= n; j++) {
            ll t1 = i * j, t2 = i + j;
            if ((n - t1) / t2 > 0 && k - t2 > 0) c += min((n - t1) / t2, k - t2);
        }
    cout << c << "\n";
}

E. Decode

Problem - E - Codeforces

5.1翻译

给你一个长度为 

标签:count,int,题解,ll,Codeforces,long,cin,Div,include
From: https://blog.csdn.net/2301_79744317/article/details/140732499

相关文章

  • Codeforces Round 962 (Div. 3)
    题目链接:CodeforcesRound962(Div.3)总结:ABC秒过,D有点难评了,E优化很妙。A.Legstag:签到voidsolve(){cin>>n;inta=n/4,b=n%4;a+=b/2;cout<<a<<endl;}B.Scaletag:模拟voidsolve(){cin>>n>>k;......
  • 题解 - 矩阵
    题目描述小明和小花知道学信息学竞赛的学生特别擅长做一些和矩阵相关的问题。例如,同学经常做的一个题目,给你一个N×M的矩阵,矩阵里面每个格子上都有一个数,要从左上角(1,1),走到右下角(N,M),每一步只能往下或者往右走,让你求经过的路径上数的总和最小。小明和小花发现这个......
  • CodeForces 1883E Look Back
    题目链接:CodeForces1883E【LookBack】思路    若直接对每个元素进行操作累乘至大于相邻的前一个元素时,可能最后会数据溢出,而且乘的2个数可能会很多,会时间超限。所以可以对每两个相邻的元素进行判断,判断他们之间差了2的多少次方。cnt记录的是当前元素和上个元素之间差......
  • luogu P1896 [SCOI2005] 互不侵犯 题解
    luoguP1896[SCOI2005]互不侵犯题解题目传送门思路状态压缩dp。状态压缩dp对于每一行,用一个\(n\)位二进制数表示每行的状态,则对于上下两行之间,设上行的数字为\(a\),下行的数字为\(b\),状态不合法有三种情况:\(a\operatorname{and}b\neq0\),即存在上行与下行同......
  • 洛谷P2440 题解
    P2440题解题目传送门提取关键词,题目需要的是数量大于$k$的最大$l$,考虑二分答案。可以二分枚举$l$的值,check函数中检验切割出该长度小段木头的个数,与$k$进行比较。小数据模拟例如,我们有五根木棍且$k=4$,分别为374106第一次循环$l=0,r=9,mid=4$。check函数中得到......
  • CodeForces 1883D In Love
    题目链接:CodeForces1883D【InLove】思路    求能否找出两个区间不相交,所以将得到的区间先按区间左端点的大小从小到大排列,再按区间右端点的大小从小到大排列,此时取出最小的右端点和最大的左端点,若右端点在左端点左侧,则存在两个不相交的区间。由于需要动态操作增加减......
  • CodeForces 1883C Raspberries
    题目链接:CodeForces1883C【Raspberries】思路    依次枚举,特判k=4的情况,因为k=4可以由2个2拼凑起来,这2个2可以不在同一个元素上,如K=4时,数组a可以为2,3,2,5,7,9,此时数组中所有的元素乘积可以被4整除。若k=4时,此时数组中元素没有可以拆分出2的情况时,所有的......
  • luogu P1896 [SCOI2005] 互不侵犯 题解
    luoguP1896[SCOI2005]互不侵犯题解题目传送门思路状态压缩dp。状态压缩dp对于每一行,用一个\(n\)位二进制数表示每行的状态,则对于上下两行之间,设上行的数字为\(a\),下行的数字为\(b\),状态不合法有三种情况:\(a\operatorname{and}b\neq0\),即存在上行与下行同......
  • Codeforces Round 962 (Div. 3) A - D详细题解(思路加代码Python,C++(垃圾灰名小白想
             吐槽一下,这次比赛不知道怎么的,可能是div3参加的人比较多吗,代码题解上去后全是inqueue,比赛的过程中我还看了提交的,80多页几千个提交全是inqueue,我的代码等了**半个多小时才运行,然后发现timelimit真的有点搞心态,思路在下一题我还要反过来去优化上一题,不过......
  • 逆序对的数量 - 题解
    逆序对的数量时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++64MB,其他语言128MB描述给定一个长度为\(n\)的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第\(i\)个和第\(j\)个元素,如果满足\(i<j\)且\(a[i]>a[j]\),则其为一个逆序对;否则......