前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforces Round #805 (Div. 3)(A~C)

Codeforces Round #805 (Div. 3)(A~C)

作者头像
浪漫主义狗
发布2022-09-16 16:35:28
3070
发布2022-09-16 16:35:28
举报
文章被收录于专栏:HAUE_LYS'Blog

A. Round Down the Price


题目大意

Origional Link

  • 对于一个数N,求其最接近且不大于该数的10^m
  • 输出N-10^m

思想

  • 初始化p = 1e10,循环枚举p = p / 10直到p < n

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

void solve(){

    LL n;
    cin >> n;

    LL p = 1e11;

    while(p > n){
        p /= 10;
    }

    cout << n - p <<endl;

}

int main(){

    int _;
    cin >> _;

    while(_--){
        solve();
    }

    return 0;

}

B. Polycarp Writes a String from Memory


题目大意

Origional Link

  • 对于字符串S,每天只能遍历三个不同字母
  • 几天可以遍历完S

思想

  • 模拟
  • vis[s[i]]记录s[i]是否为新字母,cnt记录当天的新字母的个数
  • cnt == 4说明要开始新的一天,并清空记忆

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

void solve(){

    string s;

    cin >> s;

    int flag = 0;

    bool vis[300];

    memset(vis,0,sizeof vis);

    int cnt = 0;

    for(int i = 0; i < s.size(); i ++){
        if(!vis[s[i]]){
            cnt ++;
            if(cnt == 4){
                cnt = 1;
                flag ++;
                memset(vis,0,sizeof vis);
            }
            vis[s[i]] = 1;
        }
    }   

    if(cnt) flag ++;

    cout << flag << endl;

}

int main(){

    int _;

    cin >> _;

    while(_--){
        solve();
    }

    return 0;

}

C. Train and Queries


题目大意

Origional Link

  • 顺次给定n个车站,先经过的车站可以走到后面的车站
  • 编号可能重复出现,即可能重复经过一个车站
  • 对于k次询问,给出起点和终点车站编号,求是否可以从起始站到终点站

思路

  • map<int,int> l, r分别存储某一编号的站点最左边的下标和最右边的下标
  • 对于每次询问,若起始站的最左边的下标小于终点站的最右边的下标,则可行

代码

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

void solve(){

    int n, m;

    cin >> n >> m;

    map<int,int> l, r;

    for(int i = 1; i <= n; i ++){
        int x;
        cin >> x;
        if(l[x] == 0){
            l[x] = r[x] = i;
        }
        else{
            l[x] = min(l[x],i);
            r[x] = max(r[x],i);
        }
    }

    while(m --){
        int x, y;
        cin >> x >> y;
        if(l[x] != 0 && l[y] != 0){
            if(l[x] < r[y]) cout << "YES" << endl;
            else cout << "NO" << endl;
        }
        else cout << "NO" << endl;
    }

}

int main(){
    int _;

    cin >> _;

    while(_--){
        solve();
    }   

    return 0;

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-7-29 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • A. Round Down the Price
    • 题目大意
      • 思想
        • 代码
        • B. Polycarp Writes a String from Memory
          • 题目大意
            • 思想
              • 代码
              • C. Train and Queries
                • 题目大意
                  • 思路
                    • 代码
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档