首页 > 其他分享 >AtCoder Beginner Contest 295

AtCoder Beginner Contest 295

时间:2023-12-31 14:22:38浏览次数:36  
标签:AtCoder Beginner int long ++ mp str 295 define




B - Bombsd

难度: ⭐

题目大意

给定一个n*m的网格, 其中' . '表示空白, ' # '表示障碍物, 数字x表示此处有一个炸弹, 会将附近曼哈顿距离小于等于x的格子都变成空白; 问所有炸弹爆炸后的网格;

解题思路

数据范围很小, 暴力即可;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 1e2 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m;
char g[N][N];
bool st[N][N], st2[N][N][10];
int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};

void modify(int x, int y, int u){
    if(u < 0) return;
    if(st2[x][y][u]) return;
    st[x][y] = true;
    st2[x][y][u] = true;
    for(int i = 0; i < 4; i++){
        if(x + dx[i] >= 1 && x + dx[i] <= n) modify(x + dx[i], y, u - 1);
    }
    for(int i = 0; i < 4; i++){
        if(y + dy[i] >= 1 && y + dy[i] <= m)modify(x, y + dy[i], u - 1);
    }
}

signed main() {
    IOS;
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            cin >> g[i][j];
            if(isdigit(g[i][j])){
                modify(i, j, g[i][j] - '0');
            }
        }
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(st[i][j]) cout << '.';
            else cout << g[i][j];
        }   
        cout << endl;
    }
    return 0;
}




C - Socks

难度: ⭐⭐

题目大意

小莫有n只袜子, 给出这n只袜子各自的颜色, 小莫需要把两个颜色相同的袜子两两配对, 请问最多可以配成多少双;

解题思路

也是比较直接的一道题, 没有什么贪心策略, 能配就配; 对于颜色x的袜子, 如果之前有一只颜色x的袜子, 那么就答案+1, 然后把这两个袜子去掉; 这个过程可以用map实现;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 5e5 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m, res;
map<int, int> mp;

signed main() {
    IOS;
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> m;
        if(mp[m]){
            mp[m] = 0;
            res++;
        }
        else mp[m]++;
    }
    cout << res;
    return 0;
}




D - Three Days Ago

难度: ⭐⭐⭐

题目大意

给定一个由n个数字组成的字符串s, 字符串s可以随意排序; 问有多少个区间(l, r), 可以用区间内的数字组合成两个一模一样的子串; eg: "56846485"可以变成"4568 4568";

解题思路

由题意得, 无非就是让区间内的每个数字的个数都是偶数个; 数据范围较大, 所以需要线性的解决; 因此我们可以线性的扫描字符串, 当前是第i个数字, 我们可以知道前i个数字有几个是落单的, 然后我们把落单的情况存下来, 如果在之后第j个数字, 我们又遇到了相同的落单情况, 那么(i, j)就是一个满足要求的情况; 而落单的情况我们可以用一个长度为10的字符串来表示; 用哈希来表示数量即可;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 5e5 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m, res;
int p[N];
map<string, int> mp;

signed main() {
    string s;
    cin >> s;
    int len = s.size();
    string str = "aaaaaaaaaaa";
    mp[str]++;
    for(int i = 0; i < len; i++){
        int x = s[i] - '0';
        if(str[x] == 'a') str[x] = s[i];
        else str[x] = 'a';
        res += mp[str];
        mp[str]++;
    }
    cout << res;
    return 0;
}




E - Kth Number

难度: ⭐⭐⭐⭐




F - substr = S

难度: ⭐⭐⭐⭐⭐

标签:AtCoder,Beginner,int,long,++,mp,str,295,define
From: https://www.cnblogs.com/mostimali/p/17937474

相关文章

  • AtCoder Regular Contest 167 C MST on Line++
    洛谷传送门AtCoder传送门我是傻逼。很平凡的一个计数。但是不会啊。怎么会是呢。考虑Kruskal求解MSTonLine问题。我们可以想到统计边权\(=a_i\)的出现次数。然后又可以容斥转化成统计边权\(\lea_i\)的出现次数,设其为\(f_i\)。考虑求\(f_i\)。就相当于把\(p\)......
  • AtCoder Beginner Contest 334
    B-ChristmasTrees难度:⭐⭐题目大意小莫从坐标轴的某个位置n种了一棵树,并且每隔m米就再种一棵树,注意是双向的,两边都种;给定一个区间,问这个区间中有多少棵树;解题思路我们可以让区间的边界都减去n,这样区间中的树都位于坐标km上;然后我们把边界都平移到正......
  • AtCoder Beginner Contest 复盘合集
    AtCoderBeginnerContest复盘合集修改链接2023.12.6ABC312VP(OI赛制)这次的ABC相对比较难:红橙黄黄蓝绿绿,Ex(蓝)AlinkB稍微麻烦一点。linkC很水,直接Sort一遍即可。linkD稍微思考,可以得出一个DP,准确来说不太像DPlink【警钟长鸣】我非常的弱智,\(n<=3000\)赛时写......
  • AtCoder Regular Contest 168 F Up-Down Queries
    洛谷传送门AtCoder传送门貌似是第三道问号题?感觉前面这个转化不是人能想到的。。。考虑维护\(y\)的差分序列。更进一步地,我们类比slopetrick,维护一个可重集,里面有\(y_{i+1}-y_i\)个\(i\)(为了方便我们让每次操作时\(y_{m+1}\)加\(1\))。那么一次操作就相当于,插......
  • atcoder
    DPABC275EABC274DABC274EABC271EABC270DABC266D状态机模型ABC265Emap存状态+步骤型遍历(注意DP顺序)+复杂度证明ABC262D关于数字的DP,将一类数字分成一个状态加粗样式ABC261D没啥好说的看题目写DPABC253E关于数字的DPABC251E状态机DPABC197E在一维轴上行走的DP......
  • atcoder补题计划
    DPABC275EABC274DABC274EABC271EABC270DABC266D状态机模型ABC265Emap存状态+步骤型遍历(注意DP顺序)+复杂度证明ABC262D关于数字的DP,将一类数字分成一个状态加粗样式ABC261D没啥好说的看题目写DPABC253E关于数字的DPABC251E状态机DPABC197E在一维轴上行走的DP......
  • AtCoder_abc334
    AtCoder_abc334A-ChristmasPresent题目描述输入两个数\(B,G(B\neqG)\),若\(B\)大,输出Bat,否则输出Glove。解题思路无Code//Problem:A-ChristmasPresent//Contest:AtCoder-UNIQUEVISIONProgrammingContest2023Christmas(AtCoderBeginnerContes......
  • AtCoder Regular Contest 168 E Subsegments with Large Sums
    洛谷传送门AtCoder传送门尝试二分答案,问题变为要求恰好选\(x\)段\(\ges\),最大化选的段数。发现我们不是很会算段数的\(\max\),因为要求段不重不漏地覆盖\([1,n]\)。考虑给每个\(\ges\)段\([l,r]\)一个\(r-l\)的代价,于是变成了算代价的\(\min\)。此时不再要求......
  • Atcoder ABC 333 F - Bomb Game 2
    题目大意(采用0#语言):有n个人,每个人每次要么被“炸掉”,要么就被移到最后面去,概率都是1/2,求最后只剩下初始时排名为第i的人的概率。 这道题跟人数有关,而且跟位置有关。我们定义dp[i]表示一共有i个人,第i个为最后一位留下来时的概率。(不想写公式)定义j从0到i-1,表示从前面i-1......
  • AtCoder Beginner Contest 334题解
    ⭐AtCoderBeginnerContest334前言:比赛题目链接--按照惯例只写了主要部分的代码--特别说明:Rust有一个竞赛用的输入库,并且写ABC是可以用的,但是平时写洛谷是用不了的,所以我自己写了一个cin(),凑活能用,代码见下:读输入函数fncin()->String{letmutinput=String......