首页 > 其他分享 >Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)

Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)

时间:2023-12-17 22:36:03浏览次数:24  
标签:AtCoder typedef Beginner Contest int long solve se define

Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)

A - Three Threes

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
typedef pair<ll, ll> pii;
#define fi first
#define se second

void solve()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cout << n;
    }
}

int main()
{
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }

    return 0;
}

B - Pentagon

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
typedef pair<ll, ll> pii;
#define fi first
#define se second

void solve()
{
    string a, b;
    cin >> a >> b;
    int x = 0, y = 0;
    x = abs(a[0] - a[1]);
    y = abs(b[0] - b[1]);
    if (x > 2)
    {
        x = 5 - x;
    }
    if (y > 2)
    {
        y = 5 - y;
    }
    if (x != y)
    {
        puts("No");
    }
    else
    {
        puts("Yes");
    }
}

int main()
{
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }

    return 0;
}

C - Repunit Trio

解题思路:

枚举范围内的三数之和,然后排序。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
typedef pair<ll, ll> pii;
#define fi first
#define se second

void solve()
{
    ll n;
    cin >> n;
    vector<ll> v;
    ll t = 0;
    for (int i = 0; i <= 18; i++)
    {
        t = t * 10 + 1;
        v.push_back(t);
        // cout << t << endl;
    }
    vector<ll> a;
    for (int i = 0; i < 18; i++)
    {
        for (int j = i; j < 18; j++)
        {
            for (int k = j; k < 18; k++)
            {
                a.push_back(v[i] + v[j] + v[k]);
            }
        }
    }
    // cout << a.size() << endl;
    sort(a.begin(), a.end());
    cout << a[n - 1] << endl;
}

int main()
{
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }

    return 0;
}

D - Erase Leaves

解题思路:

计算出结点\(1\)的最大子树中的结点个数\(maxs\),答案为\(n - maxs\)。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
typedef pair<ll, ll> pii;
#define fi first
#define se second

void solve()
{
    int n;
    cin >> n;
    vector<vector<int>> adj(n + 1, vector<int>());
    for (int i = 1; i < n; i++)
    {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    if (adj[1].size() == 1)
    {
        cout << 1 << endl;
        return;
    }
    vector<int> dist(n + 1);
    dist[1] = 0;
    int ans = 0;
    auto dfs = [&](auto self, int u, int fa) -> int
    {
        dist[u] = 1;
        for (auto v : adj[u])
        {
            if (v != fa)
            {
                int res = self(self, v, u);
                if (u == 1)
                {
                    ans = max(ans, res);
                }
                dist[u] += res;
            }
        }
        return dist[u];
    };
    dfs(dfs, 1, -1);
    cout << n - ans << endl;
}

int main()
{
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }

    return 0;
}

E - Takahashi Quest

解题思路:

先捡起路上所有的药水,如果过程中不会被击败,那么就有解。

从后往前枚举,记录怪兽,路途中遇到药水时,如果有怪兽要击败就捡起,否则不减,记录路途拥有最多药水数。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
typedef pair<ll, ll> pii;
#define fi first
#define se second

void solve()
{
    int n;
    cin >> n;
    vector<int> med(n + 1), mon(n + 1);
    bool f = true;
    vector<pii> v(n + 1);
    for (int i = 1; i <= n; i++)
    {
        int a, b;
        cin >> a >> b;
        v[i] = {a, b};
        if (a == 1)
        {
            med[b]++;
        }
        else
        {
            mon[b]++;
        }
        if (mon[b] > med[b])
        {
            f = false;
        }
    }
    if (!f)
    {
        puts("-1");
        return;
    }
    vector<int> ned(n + 1), ans(n + 1, 0);

    for (int i = n; i; i--)
    {
        if (v[i].fi == 1)
        {
            if (ned[v[i].se] > 0)
            {
                ans[i] = 1;
                ned[v[i].se]--;
            }
        }
        else
        {
            ned[v[i].se]++;
        }
    }
    int cur = 0;
    int res = 0;
    for (int i = 1; i <= n; i++)
    {
        if (v[i].fi == 1)
        {
            if (ans[i])
            {
                cur++;
                res = max(res, cur);
            }
        }
        else
        {
            cur--;
        }
    }
    cout << res << endl;
    for (int i = 1; i <= n; i++)
    {
        if (v[i].fi == 1)
        {
            cout << ans[i] << ' ';
        }
    }
    cout << endl;
}

int main()
{
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }

    return 0;
}

标签:AtCoder,typedef,Beginner,Contest,int,long,solve,se,define
From: https://www.cnblogs.com/value0/p/17909984.html

相关文章

  • AtCoder Beginner Contest 325
    C-Sensors但看数据发现是经典油田问题,直接dfs#include<bits/stdc++.h>usingnamespacestd;intn,m;intdx[8]={-1,-1,-1,0,1,1,1,0};intdy[8]={-1,0,1,1,1,0,-1,-1};intvis[1005][1005];charmp[1005][1005];voiddfs(intx,inty){ vis[x][y]=......
  • AtCoder Beginner Contest 332
    C-T-shirts题意是:给定一个string,字符代表每天有不同的事,做不同的事会穿不同的衣服,问你最少需要准备多少T恤。思路:贪心,能不用T恤就不要T恤#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ intn,k; cin>>n>>k; strings; cin>>s; intans=0; intcnt=k; i......
  • AtCoder Beginner Contest 333
    总结人生第一次掉rating全tm是降智操作A水题B逆天操作WA了3发第三发交的时候以为过了,等到切完E发现B怎么还没过(#include<bits/stdc++.h>usingnamespacestd;map<string,int>f;intmain(){ f["AB"]=f["BC"]=f["CD"]=f["DE"]=f["EA......
  • AtCoder Beginner Contest 332
    坐地铁时口糊了6题,回来写时结果爆longlong,0没有逆元,卡了好久A-OnlineShopping(abc332A)题目大意线上购物,买了\(n\)种物品,分别给出它们的单价和数量。若总价少于\(s\)元,则需要支付\(k\)元邮费,否则包邮。问总价多少。解题思路求个和判断下是否加邮费即可。神奇的......
  • The 2023 ICPC Asia Hangzhou Regional Contest
    目录写在前面赛时MJDGHH之后的一个半小时赛后写在最后写在前面赛时题目按照过题顺序排序,赛后补题按照个人向难度排序。虽然补题大概要拖到期末之后了。这学期确实是超负荷了,现在脑子里一团糟,赛时的记忆已经不太清楚了。省流版:搏一搏单车变摩托,但是怂了。赛时M开局我正开,......
  • AtCoder Beginner Contest 332 题解
    A-OnlineShopping题目链接AtcoderLuogu简要题意共有\(n\)件商品,第\(i\)件商品的价格为\(p_i\)日元,数量为\(q_i\)件。除了购买商品所需的的钱数,还要支付运费:如果所买商品的总价小于\(s\)日元,那么要支付运费\(k\)日元。问所需要的钱数是多少。简要思路模拟......
  • AtCoder Beginner Contest 332
    AtCoderBeginnerContest332A-OnlineShopping代码:#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e6+10;typedefpair<ll,ll>pii;voidsolve(){intn,s,k;cin>>n>>s>>......
  • AtCoder Grand Contest 001
    比赛链接A-BBQEasy从小到大排序以后,答案就是所有奇数位置之和。B-MysteriousLight发现去掉前两次反射以后,剩下的是一个在平行四边形内反射的过程,且形式类似于辗转相除。具体地,\[F(n,x)=\begin{cases} -n&x=0\\ 2x\lfloor\frac{n}{x}\rfloor+F(x,n\bmodx)&x>0\e......
  • AtCoder Regular Contest 169
    A-PleaseSign某个\(A_i\)对\(A_1\)的贡献是\(\binom{10^{100}}{\mathrm{dep}_i}\),所以深度为\(d\)的节点的\(A_i\)之和只要不为\(0\),其贡献就一定远大于深度\(<d\)的所有点的贡献之和。从大到小找到第一个和非零的深度即可。B-SubsegmentswithSmallSums直......
  • AtCoder Beginner Contest 332 (D)
    题目链接思路:这就是一个二维的全排列问题代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;#defineLNF0x3f3f3f3f3f3f3f3f#defineINF0x3f3f3f3f#defineIOSios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);#definepllp......