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

AtCoder Beginner Contest 378

时间:2024-11-02 21:43:36浏览次数:3  
标签:AtCoder tx Beginner 378 int ty cin long ++



A - Pairing

题意

给\(4\)个数,每次选两个数字相同的丢掉。求最大操作数。

思路

模拟。

代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 1e6 + 5;

void solve()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    map<int, int> m;
    m[a]++;
    m[d]++;
    m[c]++;
    m[b]++;
    int ans = 0;
    for (auto& i : m)
    {
        ans += i.second / 2;
    }
    cout << ans << endl;

}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

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

    return 0;
}


B - Garbage Collection

题意

有\(n\)种垃圾,对于第\(i\)种垃圾,当日期对\(q_i\)取模等于\(r_i\)时,这种垃圾会被回收。有\(Q\)次查询,对于第\(j\)次查询,给定垃圾类型\(t_j\)和投放日期\(d_j\),输出这种垃圾下一次被回收的日期。
注:如果垃圾的投放日期和收集日期相同,则垃圾会在当天被回收。

思路

模拟。

代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

void solve()
{
    int n;
    cin >> n;
    vector<int> q(n), r(n);
    for (int i = 0; i < n; ++i)
    {
        cin >> q[i] >> r[i];
    }
    int Q;
    cin >> Q;
    while (Q--)
    {
        int t, d;
        cin >> t >> d;
        t--;
        int qi = q[t], ri = r[t];
        int now = d % qi, ans;
        if (now == ri)
        {
            ans = d;
        }
        else if (now < ri)
        {
            ans = d + ri - now;
        }
        else
        {
            ans = d + qi - now + ri;
        }
        cout << ans << endl;
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

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

    return 0;
}

C - Repeating

题意

给定长度为\(n\)的正整数序列\(A\ =\ (A_1,A_2,···,A_n)\)。定义序列\(B\ =\ (B_1,B_2,···,B_n)\),对于\(i\ =\ 1,2,···,n\),若存在\(j\ (j < i)\)使得$$A_i=A_j\(则\)B_i = j\(,否则\)B_i = -1$。

思路

模拟,怕超时用了个\(set\)记录下标到\(i\)时出现过的元素。

代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

void solve()
{
    int n;
    cin >> n;
    vector<int> v(n), b(n, -1);
    for (int i = 0; i < n; i++)
    {
        cin >> v[i];
    }
    set<int> s;
    for (int i = 0; i < n; i++)
    {
        if (s.count(v[i]))
        {
            for (int j = i - 1; j >= 0; j--)
            {
                if (v[j] == v[i])
                {
                    b[i] = j + 1;
                    break;
                }
            }
        }
        s.insert(v[i]);
    }
    for (int i = 0; i < n; i++)
    {
        cout << b[i] << " ";
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

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

    return 0;
}

D - Count Simple Paths

题意

给定\(h\)行、\(w\)列的图,"."表示空,"#"表示阻塞。求从每个点出发,不被阻塞的、长度为\(k+1\)的路径条数(不能重复经过一点)。

思路

数据非常小,直接搜。

代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pii;

const int mxn = 15;

char mp[mxn][mxn];
bool vis[mxn][mxn];

int dx[] = { 0, 0, 1, -1 };
int dy[] = { 1, -1, 0, 0 };
int h, w, k;
int ans;

void dfs(int x, int y, int step)
{
    if (step == k) 
    {
        ans++;
        return;
    }
    for (int i = 0; i < 4; i++) 
    {
        int tx = x + dx[i];
        int ty = y + dy[i];
        if (tx < 0 || tx >= h || ty < 0 || ty >= w || vis[tx][ty] || mp[tx][ty] == '#')
        {
            continue;
        }
        vis[tx][ty] = true;
        dfs(tx, ty, step + 1);
        vis[tx][ty] = false;
    }
}

void solve() 
{
    cin >> h >> w >> k;
    for (int i = 0; i < h; i++) 
    {
        for (int j = 0; j < w; j++) 
        {
            cin >> mp[i][j];
        }
    }

    for (int i = 0; i < h; i++)
    {
        for (int j = 0; j < w; j++) 
        {
            if (mp[i][j] == '.') 
            {
                vis[i][j] = true; 
                dfs(i, j, 0);
                vis[i][j] = false; 
            }
        }
    }
    cout << ans << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

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

    return 0;
}

E - Mod Sigma Problem

题意

给定\(n\)、\(m\),求:

思路

代码

点击查看代码



比赛链接 https://atcoder.jp/contests/abc378

标签:AtCoder,tx,Beginner,378,int,ty,cin,long,++
From: https://www.cnblogs.com/Seii/p/18522490

相关文章

  • ABC378 比赛记录
    ABC378比赛记录这场打得太唐了。。。A模拟B模拟C\(map\)模拟D爆搜模拟E很典的题目,感觉我绝对见过原题。要求\((a-b)\modm\)可以转化为$(a\modm)-(b\modm)+[a<b]*m$然后前缀和加树状数组做完了。F做\(F\)的时候本来还有一个多小时,rk300+。结果做了......
  • AtCoder Beginner Contest 363 - VP记录
    PrefaceA-PilingUpAtCoder日爆导致半天登不上去。这道题还是看的洛谷上的题面,用洛谷RMJ交的。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intr;scanf("%d",&r); if(r<=99)printf("%d\n",100-r); elseif(r<=199)printf("%d\......
  • P3780 苹果树 题解
    传送门夏天近了,又到了恋爱的季节,小Q家门前的苹果树上结满了红红圆圆的苹果。这株苹果树是一个有着\(n\)个结点的有根树,其中结点被依次编号为\(1\)至\(n\)。\(1\)号结点为根,其余每一个结点的父结点一定是某个编号较小的结点。每一个结点上都有一些苹果,第\(i\)个结点上有\(a_i(a_......
  • Solution - Atcoder Atcoder ARC137C Distinct Numbers
    如果尝试去刻画这个问题,会发现非常复杂,于是不妨一步一步来。考虑Alice的第一步,此时Alice操作的位置是固定的。考虑把\(a_n\)移到一个位置后,接下来的\(\max\)是\(a_{n-1}\)或\(a_n\),Bob对应也只能这么操作。注意到Bob也有可能操作的是\(a_n\),这看起来就很特殊......
  • TOYOTA SYSTEMS Programming Contest 2024(AtCoder Beginner Contest 377) 补题记录(A-E
    AtCoderBeginnerContest377A-RearrangingABC字符串有ABC三个字母即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongsignedmain(){ strings; cin>>s; map<char,int>mp; for(autot:s){ mp[t]=1; } if(mp[......
  • AtCoder Beginner Contest 376 题解
    AtCoderBeginnerContest376题解AtCoderBeginnerContest376A-CandyButton#include<bits/stdc++.h>#defineendl'\n'usingnamespacestd;voidsolve(){ intn,c;cin>>n>>c; intpre=-1; intans=0; for(inti=1;i<=n;i++)......
  • dp专题总结 - AtCoder DP Contest
    dp专题总结题单:this w......
  • Atcoder DP Contest
    好像都在说这套题很好,所以来刷一遍太水的就只放代码了尚未完工,先发一下猫猫可爱捏https://www.tldraw.com/ro/1g8hQBpWTkduIlFxT3c0P?d=v-1275.1523.960.968.pageA.Frog1#include<bits/stdc++.h>usingnamespacestd;intn;inth[100001];intf[100001];intmain(){ ......
  • AtCoder Beginner Contest 366 - VP记录
    A-Election2高桥日常出镜,kkk好好学学。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intn,t,a; scanf("%d%d%d",&n,&t,&a); if(t>n-t||a>n-a)printf("Yes\n"); elseprintf("No\n"); return0;......
  • AtCoder Beginner Contest 377
    上周六咕咕咕了省流版A.排序判断即可B.枚举判断即可C.记录覆盖位置去重,总数-覆盖数即可D.枚举右端点,考虑符合条件的左端点数量即可E.考虑排列的\(i\top_i\)图,考虑操作数与走的边数关系,利用环循环节算偏移量即可F.考虑每个皇后实际覆盖的位置,枚举先前皇后计算覆......