2024牛客寒假营Day2||ABEF

原文地址

A-Tokitsukaze and Bracelet

题意

根据手环的三个属性值判断手环的等级。

  1. 对攻击百分比来说,+0为100%,+1为150%,+2为200%
  2. 对体力和精神来说,+0在 { 29 , 30 , 31 , 32 } \{29,30,31,32\} {29,30,31,32}里选择,+1在 { 34 , 36 , 38 , 40 } \{34,36,38,40\} {34,36,38,40}里选择,+2固定为45
数据范围

n ( 1 ≤ n ≤ 100 ) n(1≤n≤100) n(1≤n≤100)

a i , b i , c i ( a i ∈ { 100 , 150 , 200 } ; b i , c i ∈ { 29 , 30 , 31 , 32 , 34 , 36 , 38 , 40 , 45 } ) a_i,b_i,c_i(a_i∈\{100,150,200\};b_i,ci∈\{29,30,31,32,34,36,38,40,45\}) ai,bi,ci(ai∈{100,150,200};bi,ci∈{29,30,31,32,34,36,38,40,45})

思路

模拟即可

参考代码

cpp 复制代码
void solve() {
    int lv1[3] = { 100,150,200 };
    int lv2[9] = { 29,30,31,32,34,36,38,40,45 };
    int a, b, c;cin >> a >> b >> c;
    int ans = 0;
    for (int i = 0;i < 3;i++) {
        if (a == lv1[i]) { ans += i; break; }
    }
    for (int i = 0;i < 9;i++) {
        if (b == lv2[i]) {
            if (i < 4)ans += 0;
            else if (i < 8)ans += 1;
            else ans += 2;
            break;
        }
    }
    for (int i = 0;i < 9;i++) {
        if (c == lv2[i]) {
            if (i < 4)ans += 0;
            else if (i < 8)ans += 1;
            else ans += 2;
            break;
        }
    }
    cout << ans << endl;
}

B-Tokitsukaze and Cats

题意

关猫,每个猫被限制在一个单元格内就算被关住了,如图:

给猫的坐标,询问至少需要多少片防猫网能把他们全都关住。

数据范围

n , m , k ( 1 ≤ n , m ≤ 300 ; 1 ≤ k ≤ n ⋅ m ) n, m, k (1≤n,m≤300;1≤k≤n⋅m) n,m,k(1≤n,m≤300;1≤k≤n⋅m)

x i , y i ( 1 ≤ x i ≤ n ; 1 ≤ y i ≤ m ) x_i, y_i (1≤xi≤n; 1≤yi≤m) xi,yi(1≤xi≤n;1≤yi≤m)

思路

遍历坐标点判断它上下左右是否有隔板,如果没有则补充。

参考代码

cpp 复制代码
void solve() {
    int n, m, k;cin >> n >> m >> k;
    map<pair<int, int>, bool>cats;
    int ans = 0;
    while (k--) {
        int x, y;cin >> x >> y;
        cats[{ x, y }] = true;
        pair<int, int>pu = { x - 1,y }, pd = { x + 1,y }, pl = { x,y - 1 }, pr = { x,y + 1 };
        int cnt = 4;
        if (cats.count(pu) != 0)cnt -= 1;
        if (cats.count(pd) != 0)cnt -= 1;
        if (cats.count(pl) != 0)cnt -= 1;
        if (cats.count(pr) != 0)cnt -= 1;
        ans += cnt;
    }
    cout << ans << endl;
}

E&F-Tokitsukaze and Eliminate

题意

有一排n个宝石,第i个的颜色是 c o l i col_i coli,可以进行如下的操作:

选一种颜色x,将颜色为x的最右边的那颗宝石及其右边的所有宝石全部消除。

数据范围

T ( 1 ≤ T ≤ 2 ∗ 1 0 5 ) T(1\leq T\leq 2 * 10^5) T(1≤T≤2∗105)

n ( 1 ≤ n ≤ 2 ∗ 1 0 5 ) n(1\leq n\leq 2 * 10^5) n(1≤n≤2∗105)

easy: 1 ≤ c o l i ≤ m i n ( n , 2 ) 1\leq col_i\leq min(n,2) 1≤coli≤min(n,2)

hard: 1 ≤ c o l i ≤ n 1\leq col_i\leq n 1≤coli≤n

思路

贪心,从右边枚举,当找到最后一种达到两次出现的颜色后,进行一次对该颜色的操作,直到所有宝石都被消除。

参考代码

cpp 复制代码
void solve() {
    int n;cin >> n;
    vector<int>col(n + 1);
    set<int>cls;
    for (int i = 1;i <= n;i++) {
        cin >> col[i];
        cls.insert(col[i]);
    }
    int tn = cls.size();    // 颜色种数
    map<int, int>clrs;
    map<int, int>colors;
    int ans = 0;
    int cnt = 0;
    int pi = n;
    while (tn != 0) {
        for (int i = n;i > 0;i--) {
            colors[col[i]]++;
            if (colors[col[i]] == 1) {
                cnt++;  // 达到两次及以上的颜色数
                if (cnt == tn) {
                    ans++;
                    cnt = 0;
                    colors = clrs;
                    pi = i - 1;
                }
            }
        }
        tn = colors.size();
        colors = clrs;
        n = pi;cnt = 0;
    }
    cout << ans << endl;
}
相关推荐
繁依Fanyi12 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
烦躁的大鼻嘎28 分钟前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
C++忠实粉丝1 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
用户37791362947551 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法
福大大架构师每日一题1 小时前
文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
算法·文心一言
EterNity_TiMe_2 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心2 小时前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds2 小时前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao2 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian2 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode