每日两题day65

今天你AC了吗?

每日两题day65


一、基础题

题目:P1008 NOIP 1998 普及组 三连击 - 洛谷

思路:

暴力遍历每个三位数及其倍数,拆开检查是否是1~9的序列

代码:

cpp 复制代码
#include <bits/stdc++.h>

using i64 = long long;
constexpr int inf = 2147483647;

int main() {
    for (int i = 100; i * 3 <= 999; i++) {
        int j = 4;
        std::set<char> x;
        while (--j) {
            std::string s = std::to_string(j * i);
            for (auto u: s) {
                x.insert(u);
            }
            if (x.size() == 9 && *x.begin() != '0') {
                printf("%d %d %d\n", i, i * 2, i * 3);
            }
        }
    }
    return 0;
}

二、提高题

题目:P1098 NOIP 2007 提高组 字符串的展开 - 洛谷

思路:

遍历s,遇到'-'时检查前后是否满足展开条件,再按是否星号->是否数字->是否大小写,最后统一处理是否翻转的顺序分类处理(ps:不保证是最简写法),处理下标(/指针/迭代器)时注意越界问题。

代码:

cpp 复制代码
#include <bits/stdc++.h>

using i64 = long long;
constexpr int inf = 2147483647;

int main() {
    int a, b, c;
    std::string s;
    std::cin >> a >> b >> c >> s;
    std::string r;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '-' && i > 0 && s[i - 1] != '-' && i < s.size() - 1 && s[i + 1] != '-') {
            if (s[i + 1] <= s[i - 1] || abs(s[i + 1] - s[i - 1]) > 26) {
                r.push_back(s[i]);
            } else {
                int x = r.size();//记录展开字符串的第一个字符位置
                if (a != 3) {
                    for (int ii = s[i - 1] + 1; ii <= s[i + 1] - 1; ii++) {
                        for (int j = 0; j < b; j++) {
                            r.push_back((char) ii);
                        }
                    }
                    if (a == 2 && s[i - 1] >= 'a' && s[i - 1] <= 'z') {
                        for (int j = x; j < r.size(); j++) {
                            r[j] += 'A' - 'a';
                        }
                    }
                } else {
                    int cnt = s[i + 1] - s[i - 1] - 1;
                    cnt *= b;
                    if (cnt <= 0) cnt = 0;
                    while (cnt--) {
                        r.push_back('*');
                    }
                }
                if (c == 2) {
                    std::reverse(r.begin() + x, r.end());
                }
            }
        } else {
            r.push_back(s[i]);
        }
    }
    std::cout << r;
    return 0;
}
相关推荐
richard_yuu21 分钟前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
mmmmath_336 分钟前
LeetCode.225.用队列实现栈
算法
Elaine33637 分钟前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
2601_9657422240 分钟前
布局GEO AI本地营销,我重点看这几个细节
大数据·人工智能·算法·ai·新媒体运营
EatFan40 分钟前
AI Agent 上生产前先加三道闸门:审批、限权、可回放的工程实践
人工智能·python·算法·多智能体·ai agent·mcp·harness
思茂信息1 小时前
CST软件BCI仿真模型及仿真案例
开发语言·单片机·嵌入式硬件·算法·emc
海上小飞龙1 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Persistent的粽子!1 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
小小龙学IT2 小时前
三菱 PLC MC 协议(SLMP / QnA 兼容 3E 帧)深度解析:从帧结构到 C++/Go 双语言采集实战
c语言·c++·golang
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出游戏速通中的“独特初始能量值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质