ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtCoder Beginner Contest 045 题解

2022-02-03 19:33:18  阅读:215  来源: 互联网

标签:AtCoder const cout temp int 题解 cin 045 define


目录

ABC 的 AB 感觉稍微水了一点,以后就懒得写题解惹 qvq

A - Trapezoids

int main (){
    IOS
    int a, b, h; cin >> a >> b >> h;
    cout << (a + b) * h / 2 << endl;
    return 0;
}

B - Card Game for Three (ABC Edit)

题目大意:

A、B、C 三个人, 每个人有若干张卡,有a、b、c 三种卡。每个人打完一张卡,就轮到对应字母的人接着打(可以是自己)。先打完所有牌的人获胜。

分析:

一开始以为是一个博弈题,没想到三个人都只能选择打牌堆顶的卡。(那 tm 不是没得选择吗)牌发到手上的时候,获胜的人就已经确定了,所以按题意模拟输出获胜者即可。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define Equ(a,b) (fabs((a)-(b))<eps)
#define More(a,b) (((a)-(b))>(eps))
#define x first
#define y second
using namespace std;
const int N=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;
int a[N];
int main (){
    IOS
    map <char, int> mp;
    mp['a'] = 0, mp['b'] = 1, mp['c'] = 2;
    string mp2 = "ABC";
    string s[3]; cin >> s[0] >> s[1] >> s[2];
    int now = 0;
    while (s[now].size()){
        int temp = now;
        now = mp[s[temp].front()];
        s[temp].erase(0, 1);
    }
    cout << mp2[now] << endl;
    return 0;
}

C - Many Formulas

题目大意:

给出一个长度不超过 10 的数字,可以在数字间插入若干个加号。求所有插入情况的计算式之和。

image-20220203190057836

分析:

深搜找到所有情况,然后暴力求就完事了。感觉用 python 可能会方便点。python 有个很好用的函数 eval。

#include<bits/stdc++.h>
#define int long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define Equ(a,b) (fabs((a)-(b))<eps)
#define More(a,b) (((a)-(b))>(eps))
#define x first
#define y second
using namespace std;
const int N=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;
int a[N];
set <string> ans;
void dfs (string s){
    ans.insert (s);
    for (int i = 1 ; i < s.size () ; i ++){
        string temp = s;
        if (isdigit (s[i]) && isdigit (s[i - 1])){
            temp.insert(i, 1, '+');
            if (!ans.count(temp))
                dfs (temp);
        }
    }
}
int eval (string s){
    int res = 0, sum = 0; 
    for (int i = 0 ; i < s.size () ; i ++){
        if (isdigit(s[i])){
            res = res * 10 + (s[i] - '0');
        }
        else {
            sum += res;
            res = 0;
        }
    }
    sum += res;
    return sum;
}
signed main (){
    IOS
    string t; cin >> t;
    int sum = 0;
    dfs (t);
    for (auto i : ans){
        // cout << i << ' ' << eval (i) << endl;
        sum += eval (i);
    }
    cout << sum << endl;
    return 0;
}

D - Snuke's Coloring

题目大意:

给出一个部分格子被染成黑色的网格,问你恰好有 k 个格子被染成黑色的 \(3 \times 3\) 的网格有多少个。

分析 :

题目数据范围较大,\(1e9 \times 1e9\) 的网格存不下。但是被染色的点最多只有 \(1e5\) 个。每个点最多可以影响 9 个 \(3 \times 3\) 的网格,可以从这个方向入手解决。那么最多不会超过 9e5 个网格被染色,所以我们可以存下所有被染色的 \(3 \times 3\) 的网格计数求得。同时可以看出,全是空白的 \(3 \times 3\) 的网格是最多的。我们可以通过式子计算而来。详见代码。

#include<bits/stdc++.h>
#define int long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define Equ(a,b) (fabs((a)-(b))<eps)
#define More(a,b) (((a)-(b))>(eps))
#define x first
#define y second
using namespace std;
const int N=1e6+7;
const double eps=1e-6;
const int mod=1e9+7;
typedef pair<int, int> pii;
map <pii, int> cnt;
int h, w, n;
int ans[10];
void f (int u, int v){
    for (int i = max ((int)3, u) ; i <= min(u + 2, h) ; i ++){
        for (int j = max((int)3, v) ; j <= min (v + 2, w) ; j ++){
            cnt[{i, j}] ++;
        }
    }
}
signed main (){
    IOS
    cin >> h >> w >> n;
    while (n --){
        int u, v; cin >> u >> v;
        f(u, v);
    }
    int left = 0;
    for (auto i : cnt){
        ans[i.second]++;
        left ++;
    }
    cout << (h - 2) * (w - 2) - left << endl;
    for (int i = 1 ; i <= 9 ; i ++){
        cout << ans[i] << endl;
    }
    return 0;
}

标签:AtCoder,const,cout,temp,int,题解,cin,045,define
来源: https://www.cnblogs.com/sweet-guagua/p/15861870.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有