Atcoder [ABC131] 4道题

  • Post author:
  • Post category:其他



1.[ABC131A] Security

题意:

已知给出一个四位数,如果数字中有连续的数字,就把这个数叫做安全代码,如果该数字是安全代码的话就输出 Bad,反之输出 Good。

说明/提示

约束条件


S S S是仅由半角数字构成长度为4 4 4的字符串


样本扩展1


因为第2个2个2个2个和第3个3个3个3个字是一样的,所以377637763776是很难输入的安全代码。

样本扩展2


因为相同的数字不连续,所以8080808080不是很难输入的安全代码。

求出个十百千位即可。

#include <iostream>
#include <math.h>
#define ll long long
using namespace std;
     
ll n,g,s,b,q;
int main()
{
    cin >> n;
    g = n % 10;
    s = n / 10 % 10;
    b = n / 100 % 10;
    q = n / 1000;
    if(g == s || s == b || b == q) cout << "Bad";
    else cout << "Good";
    return 0;
}


2.[ABC131B] Bite Eating

题意翻译

有 N N N 个苹果。苹果 i i i 的“味道”是 L+i−1 L+i-1 L+i−1 。“味道”也有可能是负的。

你可以用一个以上的苹果来制作苹果派。苹果派的“味道”是作为苹果的“味道”的总和。

因为肚子饿了,所以你吃了一个苹果。吃下去的苹果不能作为苹果派的材料。

想要尽量做出与预定的苹果派相同,即用没吃的 N−1 N-1 N−1 个苹果做出的苹果派的“味道”要与用全部 N N N 个苹果做出的苹果派的“味道”的绝对值的差尽可能小。

吃掉选出的最合适苹果,计算以未吃的 N−1 N-1 N−1 个苹果做出的苹果派的“味道”。

另外,可以证明这个值是唯一确定的。

方法:选出绝对值最小的数变为0,然后相加。

#include <iostream>
#include <bits/stdc++.h>
#include <math.h>
#define ll long long
using namespace std;

ll n,m,s,ls[1015],minn,minh;

int main()
{
    cin >> n >> m;
    for(ll i = 1 ; i <= n ; i++) ls[i] = m + i - 1;
    //for(ll i = 1 ; i <= n ; i++) cout << ls[i] << ' ';
	minn = ls[n]; minh = n; //cout << minn << '\n';
    for(ll i = 1 ; i <= n ; i++)
	{
		//cout << abs(ls[i]) << ' ' << minn << ' ' << min(minn,abs(ls[i])) << '\n';
		if(abs(ls[i]) < abs(minn))
		{
			//cout << minn << ' ' << abs(ls[i]) << ' ' << i << '\n';
			minn = ls[i]; minh = i;
		}
	}
	ls[minh] = 0;
	for(ll i = 1 ; i <= n ; i++)
	{
		s += ls[i];
		//cout << ls[i] << ' ';
	}
	cout << s;
    return 0;
}


3.[ABC131C] Anti-Division

给出四个整数 A,B,C 和 D。 查找 A 和 B(含)之间不能被 C 或 D 均分(整除)的整数数。

最大公约数可以使用辗转相除法。


算法基础:辗转相除法_python_ok的博客-CSDN博客

最小公倍数 = a和b的积除以最大公约数(a * b / 最大公约数)

能被a,b整除的数 = 能被a整除的数 + 能被b整除的数 – 能被a和b的最小公倍数整除的数(重复的数)

#include <bits/stdc++.h>
using namespace std;

int mx(int a,int b)
{
    int l;
    while(b > 0)
    {
    	l = a % b;
    	a = b;
    	b = l;
    }
    return a;
}
int main()
{
    long long a,b,c,d;
    cin >> a >> b >> c >> d;a--;
    long long anj = c * d / mx(c,d);
    cout << (b - b / c - b / d + b / anj) - (a - a / c - a / d + a / anj);
    return 0;
}


4.[ABC131D] Megalomania

题意翻译

NNN 个任务,完成一个任务需要 AiA_iAi​ 秒,需要在 BiB_iBi​ 秒前内完成(可以压线完成,即完成的时间正好是 BiB_iBi​ )。问是否能完成全部任务,如果能,输出 YesYesYes ,否则输出 NoNoNo 。

比较大小即可。

#include <bits/stdc++.h>
using namespace std;
     
struct txt
{
	int x,y;
}ls[500005];
     
bool cmp(txt x,txt y)
{
	return x.y < y.y;
}
     
int main()
{
    int n; cin >> n;
    for(int i = 1 ; i <= n ; i++) cin >> ls[i].x >> ls[i].y;
    sort(ls + 1,ls + 1 + n,cmp);
    for(int i = 1 ; i <= n ; i++)
    {
    	ls[i].x += ls[i - 1].x;
    	if(ls[i].x > ls[i].y)
    	{
    		cout << "No";
    		return 0;
    	}
	}
	cout << "Yes";
	return 0;
}

好了,886~

此文章由洛谷用户zifan2与CSDN用户python_ok所有!