首页 > 其他分享 >AtCoder Beginner Contest 360 ( A~D)

AtCoder Beginner Contest 360 ( A~D)

时间:2024-07-19 20:31:12浏览次数:13  
标签:AtCoder abc360 cout Beginner int cin tie include 360

A - A Healthy Breakfast

https://atcoder.jp/contests/abc360/tasks/abc360_a
水题

题意:只要R在M左侧即可
思路:

因为只要三位,所以只需要判断R在第一位或M在最后一位,有重复的情况

#include<iostream>
#include<cmath>
#include<algorithm>

using namespace std;

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

	string s;
	cin >> s;

	if (s[0] == 'R')
	{
		cout << "Yes" << endl;
		return 0;
	}
	else if (s[2] == 'M')
	{
		cout << "Yes" << endl;
	}
	else
		cout << "No" << endl;

	return 0;
}

B - Vertical Reading

https://atcoder.jp/contests/abc360/tasks/abc360_b

题意:

给你两个由小写英文字母组成的字符串S和T。判断是否存在一对整数c和w,使1≤c≤w<∣S∣,且满足以下条件。这里,∣S∣表示字符串S的长度,注意w必须小于∣S∣。如果S从开始每w个字符分开,则长度至少为c的子字符串的第c个字符按顺序的连接等于T。

思路:

字符串

#include <iostream>
#include <vector>

using namespace std;

typedef long long LL;

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

    string s, t;
    cin >> s >> t;
    
    bool flag = false;

    for (int i = 1; i < s.size(); i++)
    {
        vector<string> sub;
        for (int j = 0; j < s.size(); j += i)
        {
            sub.push_back(s.substr(j, i));
        }
        for (int j = 0; j < i; j++)
        {
            string ans;
            for (auto& x : sub)
            {
                if (j < x.size())
                    ans += x[j];
            }
            if (ans == t)
                flag = true;
        }
    }

    if (flag)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;

    return 0;
}

补一下,暴力枚举

#include<iostream>

using namespace std;

string s, t;

void solve()
{
    cin >> s >> t;
    for (int i = 1; i < s.size(); i ++ )
    {
        for (int j = 0; j < i; j ++ )
        {
            string str;
            for (int k = j, cnt = 0; k < s.size(); k += i)
            {
                str += s[k];
            }
            
            if (str == t)
            {
                cout << "Yes" << endl;
                return;
            }
        }
    }
    cout << "No" << endl;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    solve();

    return 0;
}

C - Move It

https://atcoder.jp/contests/abc360/tasks/abc360_c

题意:

一共有N个编号为1 ~ N的箱子,N个编号为1 ~ N的物品。物品i(1≤i≤N)在第i个箱子中,重量为W i。您可以重复执行零次或多次选择一个项目并将其移动到另一个框的操作。如果要移动的物品的重量为w,则操作的成本为w。求出使每个箱子只装一件物品所需的最小总成本。

思路:
#include <iostream>
#include <vector>

using namespace std;

typedef long long LL;

const int N = 1e5 + 10;

int n;
int a[N], w[N];
int sum[N], mx[N];

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++)
    {
        cin >> w[i];
        sum[a[i]] += w[i];
        mx[a[i]] = max(mx[a[i]], w[i]);
    }

    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        ans += sum[i] - mx[i];
    }

    cout << ans << endl;

    return 0;
}

D - Ghost Ants

二分可以
想法: 利用相对速度,将一只蚂蚁视为禁止不动,另一只蚂蚁会以两倍的速度向静止蚂蚁移动,然后利用二分
总体就是,先判断方向,然后进行二分

E - Random Swaps of Balls

期望dp

标签:AtCoder,abc360,cout,Beginner,int,cin,tie,include,360
From: https://www.cnblogs.com/aeroides/p/18312311

相关文章

  • 题解:AT_abc360_c [ABC360C] Move It
    背景机房大佬掉大分了,乐悲。题意给你几个箱子和每个箱子里装有的东西\(a\)和对应的重量\(w\),现在要让每个箱子里都装有一个东西,每次可以移动任意一个箱子中的任意一个东西,代价为它的重量,问最小代价。分析贪心。首先最终状态里所有箱子一定只有一个东西,那么对于所有装东西......
  • Equal Cut (AtCoder - arc100_b)(前缀和,思维)
    题目来源:https://atcoder.jp/contests/abc102/tasks/arc100_b?lang=en//题意:将一串数字分为四段,求出每段的总和,怎么分,才能让这四段的各自总和的极差最小?//思路:“实在是想不出来好的算法,只会暴力,当时想的枚举中间的那一刀,然后左右二分,但是感觉也不太好写,毕竟我总是被二分的边界......
  • Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)
    ⚪题和板题大赛/jk好像能切的样子,但是太菜了,唐了8罚。A-BuyaPen输出除去某个颜色以外,其他颜色代表的最大值。点击查看代码#include<bits/stdc++.h>usingnamespacestd;inta,b,c;strings;signedmain(){cin>>a>>b>>c;cin>>s;if(s[0]=='R')a=103......
  • Solution - Atcoder AGC022D Shopping
    考虑到不管怎么走,都是\(0\)最后又绕回\(0\),于是答案肯定是\(2L\)的倍数。那么考虑\(\frac{\operatorname{ans}}{2L}\)即可。那么对于\(t_i\),可以先让答案加上\(\lfloor\frac{t_i}{2L}\rfloor\),同时令\(t_i\leftarrowt_i\bmod2L\)。原因就是考虑到这被去除掉的\(2......
  • Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)
    这场比赛还是比较水的A,B,C跳过D题dij把点权和边权都转换为边权即可E题DP可以用\(map\)存一下等差数列的差先说\(O(n^4)\),\(f_{len,i,j,t}\)分别表示长度,现在在\(i\),上一个在\(j\)显然动态转移方程就有了\(f_{len,i,j,k}=\sum_{k=1}^{k=j-1}f_{len-1,j,k,t}\)点击查看......
  • AtCoder Beginner Contest 362 补题记录(A~E,G)
    A分三类情况讨论即可。voidsolveqwq(){intr=io.read(),g=io.read(),b=io.read();stringqwq=io.readstring();if(qwq=="Blue")printf("%lld\n",min(r,g));elseif(qwq=="Red")printf("%lld\n",......
  • Solution - Atcoder AGC021D Reversed LCS
    考虑到\(\operatorname{LCS}(T,T')\)这个形式实在是不太优美,考虑转化一下形式。感受一下,能够知道\(T\)的最长回文子序列\(|\operatorname{LPS}(T)|=|\operatorname{LCS}(T,T')|\)。具体证明可以见zhihu,本人暂时还没看懂。那么接下来对于单个串的\(\operatorname{LPS......
  • Solution - Atcoder ARC127E Priority Queue
    考虑转化一下,每个最后留下来的集合都相对的对应着一个被删除的集合。于是考虑去对被删除的数去计数。然后贪心的,去让每一次\(2\)操作删除的数都是前面加入中还剩下的最后加入的数(因为有的可能被前面的\(2\)操作删了)。对于证明,考虑到如果不是剩下的最后加入的,那么中间可能会......
  • 【atcoder】习题——位元枚举
    题意:求i&M的popcount的和,i属于0……N主要思路还是变加为乘。举个例子N=22,即10110假设M的第3位是1,分析N中:00110001110010000101发现其实等价于0010001100000001也就是左边第4位和第5位不变,右边第1位和第2位不变拼接起来,相当于0000~001101110011110110001101......
  • [ABC360B]Vertical Reading
    题解这个题看起来很好做,有两个字符串S和T,如果T的每个字符,都能在S中找到,同时要满足以下条件:将S串分割成w段,每一段的第c个字符组成T,如果可以的话,就输出Yes,否则输出No\(1\leqc\leqw<|S|\)错误思路刚开始,我的思路是找到T的每个字符在S中的位置,如果这些位置能够每隔W个的话,就输......