首页 > 其他分享 >ZZJC新生训练赛第七场题解

ZZJC新生训练赛第七场题解

时间:2024-10-21 20:21:07浏览次数:1  
标签:std ZZJC int 题解 第七场 cin long ans tie

难度分类(同一难度下按字典序上升)

  • 入门: C
  • 简单: G, D
  • 中等: E, H, F, A
  • 困难: B

C-解题思路

数一下每个字母的数量看是不是偶数就可以得到答案。

C-代码实现

#include <bits/stdc++.h>

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    
    std::string s;
    std::cin >> s;

    std::vector<int> c(26);
    for (auto ch: s) {
        c[ch - 'a']++;
    }

    int f = 1;
    for (auto x: c) {
        if (x % 2) {
            f = 0;
            break;
        }
    }

    if (f) {
        std::cout << "Yes";
    } else {
        std::cout << "No";
    }
}

G-解题思路

直接用梯形面积公式计算即可,注意数据范围, \((a+b)*h\) 的最大值已经来到了 \(2e19\),这已经超出了long long甚至unsigned long long的范围,然而题目保证了 \(h\) 是偶数,而 \(1e19\) 是在unsigned long long范围内的,因此只需要把 \(h/2\) 放前面算就行了,即 \(h/2*(a+b)\) 。(也可以用int128计算结果后强转unsigned long long输出,Python虽然内置高精度,但是本题多测卡掉了)

G-代码实现

#include <bits/stdc++.h>

using u64 = unsigned long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    
    int t;
    std::cin >> t;

    while (t--) {
        u64 a, b, h;
        std::cin >> a >> b >> h;

        std::cout << h / 2 * (a + b) << "\n";
    }
}

D-解题思路

按照题意模拟即可,本题卡了ceil,需要用(a+b-1)/b进行向上取整,注意数据范围,本题需要long long

D-代码实现

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    
    int n;
    std::cin >> n;

    i64 ans;
    std::cin >> ans;
    for (int i = 1; i < n; i++) {
        int x;
        std::cin >> x;

        if (ans >= x) {
            ans = (ans + x - 1) / x;
        } else {
            ans = ans + x;
        }
    }

    std::cout << ans;
}

E-解题思路

按照题意模拟即可,看谁的牌先为空就输出答案。

E-代码实现

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    
    std::string sa, sb, sc;
    std::cin >> sa >> sb >> sc;

    std::map<char, std::string> mp{{'a', sa}, {'b', sb}, {'c', sc}};
    char ans = 'a';
    while (!mp[ans].empty()) {
        char c = mp[ans].front();
        mp[ans].erase(mp[ans].begin());
        ans = c;
    }

    std::cout << (char)toupper(ans);
}
# Python写水题的简短代码可以学习一下
dic = {'a': list(input()), 'b':list(input()), 'c':list(input())}
c = 'a'
while dic[c]:
    c = dic[c].pop(0)
print(c.upper())

H-解题思路

范围相当小,纯暴力计算答案即可。

H-代码实现

#include <bits/stdc++.h>

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    int n, ans = 1e9;
    std::cin >> n;

    std::vector<int> a(n);
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
    }

    for (int i = -100; i <= 100; i++) {
        int t = 0;
        for (int j = 0; j < n; j++) {
            t += (a[j] - i) * (a[j] - i);
        }
        ans = std::min(ans, t);
    }

    std::cout << ans;
}

F-解题思路

范围相当小,纯暴力计算答案即可,注意第三个值可以用前两个值直接算出来,不要三层循环(不要将值放到容器中统计长度,这样会mle)。

F-代码实现

#include<bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    int k, s, cnt = 0;
    std::cin >> k >> s;
    
    for (int x = 0; x <= k; x++) {
        for (int y = 0; y <= k; y++) {
            if (0 <= s - x - y && s - x - y <= k) {
                cnt++;
            }
        }
    }

    std::cout << cnt;
}

A-解题思路

因为不会同时不喜欢1-9,所以其实最终的答案是不会大于10n的,而n的范围是1e4,所以从n开始+1遍历就行了。

A-代码实现

#include <bits/stdc++.h>

int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    int n, k;
    std::cin >> n >> k;

    std::set<char> st;
    for (int i = 0; i < k; i++) {
        char ch;
        std::cin >> ch;

        st.insert(ch);
    }

    int ans = n;
    while (1) {
        int f = 0;
        std::string s = std::to_string(ans);
        for (auto ch: s) {
            if (st.count(ch)) {
                f = 1;
                break;
            }
        }
        if (f) {
            ans++;
        } else {
            std::cout << ans;
            break;
        }
    }
}
# Python写水题的简短代码可以学习一下
n, k = map(int, input().split())
d = set(input().split())
ans = n
while set(str(ans)) & d:
    ans += 1
print(ans)

B-解题思路

范围很小可以直接dfs爆搜,将符号插在每个数字间的情况全考虑一遍即可

B-代码实现

#include <bits/stdc++.h>

using i64 = long long;
i64 ans = 0;


void dfs(std::string s, int pos, i64 num, i64 sum) {
    if(pos == s.size()) {  // pos是考虑了多少个数字,如果等于size说明全考虑了
        ans += sum + num;
        return;
    }

    // num是最新的加号后面的那个数字,sum是前面所有数字运算后的和
    dfs(s, pos + 1,  num * 10 + (s[pos] - '0'), sum); // 不插入加号
    dfs(s, pos + 1, s[pos] - '0', sum + num);  // 插入加号
}

int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);

    std::string s;
    std::cin >> s;

    dfs(s, 1, s[0] - '0', 0);

    std::cout << ans << "\n";
}

标签:std,ZZJC,int,题解,第七场,cin,long,ans,tie
From: https://www.cnblogs.com/udiandianis/p/18489156

相关文章

  • NOI2024 D1T1 - 集合 题解
    观察我们称\(x\)在一段序列中的“位置集合”为\(x\)出现的下标的集合。注意到,两段序列能够匹配,当且仅当两段序列的\(1\simm\)中的数的位置集合构成的多重集相等。快速比较集合,考虑哈希。哈希先实现一个从整数到整数的哈希\(f(x)\)。使用这个哈希的目的是为了提高随机......
  • 题解 P11220 / MX241020D【【MX-S4-T4】「yyOI R2」youyou 的三进制数】
    好长的标题题目描述现在有\(0\simn\)共\(n+1\)个数。定义\((x)_{3}\)表示十进制数\(x\)的三进制形式。如果没有特别强调,那么这些数均为十进制形式。youyou想构造一个序列长度为\(p\)(\(p\ge1\))的非负整数序列\(a\)。使之满足:\(a_i\in[0,n]\)。不存在\(i......
  • P9890 [ICPC2018 Qingdao R] Tournament 题解
    P9890[ICPC2018QingdaoR]Tournament题目传送门更好的阅读体验一道找规律的思维题。前置知识\(lowbit\)\(lowbit\)是指获取一个二进制数中最右边的\(1\)所对应的数值。具体地,\(lowbit\)可以通过对一个数取反然后加\(1\),再与原数进行按位与的方式来实现。intlow......
  • ZZJC新生训练赛第六场题解
    先给出比赛链接:下面说一下难度分层:(同一难度下按字典序排序)Easy(简单):BHMedium(中等):DEHard(困难):AGAnti-AK(防AK):CFA扣分扣分扣分!扣分!二维前缀差分板子题题目要求对二维区间加某个数或者查询二维区间的和与一维前缀和类似地,我们定义$sa[i][j]$为区间(......
  • 「题解」Codeforces Round 980 (Div. 2)
    before\(A\simD\)的题解A.ProfitableInterestRateProblemA.ProfitableInterestRateSol&Code数学题,有\(a-x\geqb-2x\),得\(x=b-a\)。特判\(a\geqb\)以及\(a<x\)的情况即可。#include<bits/stdc++.h>#defineM10001#defineN......
  • 双系统Linux使用windows硬盘导致git报错问题解决
    一.问题产生的背景双系统下ubuntu为了节省空间挂载使用了windows硬盘,在使用最新的gitclone代码后提示“gitfataldetecteddubiousownershipinrepository”,这是git为了安全原因限制登陆用户和仓库文件用户必须一致,否则提示上述错误信息二.问题的解决办法办法1:挂载磁盘时......
  • 「题解」Codeforces Round 979 (Div. 2)
    before\(A\simD\)的题解A.AGiftFromOrangutanProblemA.AGiftFromOrangutanSol&Code\(c_i-b_i\)最大就是\(a\)的最大值减最小值。将\(a\)的最大值\(x\)和最小值\(y\)放到头两位即可得到答案\((x-y)(n-1)\)。#include<bits/stdc++.h>#defineM......
  • AT_abc348_d [ABC348D] Medicines on Grid 题解
    题目传送门题目大意:给定一个\(n\timesm\)的地图,要求从起点S走到终点T,每移动\(1\)个会消耗\(1\)点能量,障碍#不能走,空地为.可以走,体力消耗至\(0\)也无法移动,地图位置\((x_i,y_i)\)有一瓶可以变成\(e_i\)体力的药,可以选择是否喝。问能否抵达终点,可以输出Yes,否......
  • AT_abc374_e [ABC374E] Sensor Optimization Dilemma 2 题解
    洛谷题目传送门AT题目传送门题目大意:给定\(n\)道工序,你有\(X\)元的资金,对于第\(i\)道工序,有两种机器供你选择,第一种机器可以花费\(P_i\)元处理\(A_i\)个产品,第二种机器可以花费\(Q_i\)元处理\(B_i\)个产品。钦定第\(i\)天处理的产品个数为\(W_i\),求在总花费......
  • UVA11294 Wedding 题解
    洛谷题目传送门前排提示:本题需要用到知识点2-SAT以及强联通分量,模板传送门P4782【模板】2-SAT。题目大意:有至多\(30\)对夫妻将会参加一个婚宴。他们将会坐在一个长桌子的两边。新郎新娘坐在彼此相对的一端并且新娘带着一个头饰使得她看不到和她坐在同一边的人。夫妻坐在......