首页 > 其他分享 >AtCoder Beginner Contest 363 题解 A-D(待补充)

AtCoder Beginner Contest 363 题解 A-D(待补充)

时间:2024-07-28 15:59:34浏览次数:15  
标签:AtCoder cnt Beginner int 题解 void cin solve 回文

A - Piling Up

1.1思路

其实就是向上取百位的整,需要增加多少,123则为200-123=177;

1.2代码
void solve() {
    int n;
    cin >> n;
    int t = n / 100;
    cout << (t + 1) * 100 - n;
}
B - Japanese Cursed Doll 

2.1思路

就是判断最少需要多少天,会有大于等于P个人的头发长度会超过T。

用一个while循环判断需要几天,内套一个for循环增加头发长度,并判断人数;

2.2代码
const int N = 510;

void solve() {
    int n, t, p;
    cin >> n >> t >> p;
    int a[N], cnt = 0, day = 0;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        if (a[i] >= t)cnt++;
    }
    if (cnt >= p) {
        cout << 0;
        return;
    }
    p -= cnt;
    while (p > 0) {
        for (int i = 1; i <= n; i++) {
            if (a[i] >= t)continue;//被判断过的就直接跳过
            a[i]++;
            if (a[i] >= t)p--;//长度够了,人数增加
        }
        day++;
    }
    cout << day;
}
C - Avoid K Palindrome 2

3.1思路

题意是寻找s所有字典序没有长度为k的重复子串(s=‘aab’,k=2,长度为k的重复子串就是’aa‘)

首先将s排序为字典序最小的子串,再在do-while循环内判断是否有长度为k的子串。

主要使用库函数:

next_permutation(s.begin(),s.end())

循环字符串s所有的字典序排列(头文件为algorithm)

3.2代码
void solve() {
    int n, k;
    string s;
    cin >> n >> k >> s;
 
    sort(s.begin(), s.end());
    int cnt = 0;
    do {
        bool found = false;
        for (int i = 0; i <= n - k; i++) {
            bool all = true;
            for (int j = 1; j <= k/2; j++)
                //内层循环的目的是检查从位置 i 开始的长度为 k 的子串是否是回文。
                //s.at(i + j - 1) 获取子串中从起始位置 i 开始的第 j 个字符。
                //s.at(i + k + 1 - j - 1) 获取子串中与第 j 个字符对应的从末尾开始的字符。
                if (s.at(i + j - 1) != s.at(i + k + 1 - j - 1)) all = false;
            if (all) found = true;
        }
        if (!found) cnt++;
    } while (next_permutation(s.begin(), s.end()));//循环所有可能的字符字典序排列
    cout << cnt << "\n";
}
D - Palindromic Number

11,22,99也是。

4.1思路

首先处理小于等于10的特殊情况,然后通过减去每个位数下回文数的数量来缩小目标回文数的范围,直到确定目标回文数的位数。接着,构建回文数的一半,去掉最高位的1以生成正确的回文数,最后将这个半边反转并拼接以形成完整的回文数。

4.2代码
void solve() {
    ll n;
    cin >> n;
    if (n <= 10) {
        cout << --n;
        return;
    }
    n -= 2;
    ll p = 9;
    while (n >= p << 1) {
        n -= p << 1;
        p *= 10;
    }

    string s = to_string(n % p + p / 9);
    cout << s;
    if (n < p)s.pop_back();
    reverse(s.begin(), s.end());
    cout << s;
}

标签:AtCoder,cnt,Beginner,int,题解,void,cin,solve,回文
From: https://blog.csdn.net/2301_79744317/article/details/140751140

相关文章

  • Codeforces Round 962 (Div. 3) 题解 A-F
    A.LegsProblem-A-Codeforces1.1翻译农夫约翰的农场又迎来了美好的一天。农夫约翰来到农场后,数了数n条腿。众所周知,农场里只住着鸡和牛,一只鸡有2条腿,而一头牛有4条腿。假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?1.2思路求最少有几只动物......
  • 题解 - 矩阵
    题目描述小明和小花知道学信息学竞赛的学生特别擅长做一些和矩阵相关的问题。例如,同学经常做的一个题目,给你一个N×M的矩阵,矩阵里面每个格子上都有一个数,要从左上角(1,1),走到右下角(N,M),每一步只能往下或者往右走,让你求经过的路径上数的总和最小。小明和小花发现这个......
  • AtCoder Beginner Contest 363
    比赛地址添加链接描述A-PilingUp算法:模拟题目大意在AtCoder竞赛平台中,用户的等级通过正整数分数表示,并根据分数显示相应数量的^符号。分数与^符号显示的规则如下:当分数在1到99(包括99)之间时,显示一个^。当分数在100到199(包括199)之间时,显示两个^。......
  • 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函数中得到......
  • AtCoder Beginner Contest 364 补题记录(A~F)
    VP五十八分钟苏童流体。好耶A#defineGLIBCXX_DEBUG#include<iostream>#include<cstring>#include<cstdio>#defineintlonglongconstintN=500100;std::strings[N];signedmain(){intn,cnt=1;scanf("%lld",&n);f......
  • 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真的有点搞心态,思路在下一题我还要反过来去优化上一题,不过......
  • AtCoder Beginner Contest 364
    A-GluttonTakahashi(abc364A)题目大意给定\(n\)个字符串,问是否有两个相邻的sweet。解题思路遍历判断当前字符串与上一个字符串是否都为sweet即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_......
  • 逆序对的数量 - 题解
    逆序对的数量时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++64MB,其他语言128MB描述给定一个长度为\(n\)的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第\(i\)个和第\(j\)个元素,如果满足\(i<j\)且\(a[i]>a[j]\),则其为一个逆序对;否则......