凉肝的比赛

DHZ拉来的让人肝凉的题目

https://vjudge.net/contest/352074#overview

A - Mezo Playing Zoma

#include
#include
#include
#include
#include
using namespace std;
int main()
{
	int n,k,n1,a;
	scanf("%d%d%d",&n,&k,&n1);
	a=n/n1;
	if(n%n1!=0)
	{
		a++;
	}
	a*=a;
	if(k>=a)
	{
		printf("YES");
	}
	else
	{
		printf("NO");
	}
	return 0;
}

A题是水题,很多人是统计L和R的数量再+1求出的范围,但是lsr大佬还有更简便的方法如图:
凉肝的比赛_第1张图片

B - Just Eat It!

B题是使最大子串的值要小于总值,当时这道题我脑子憨了一下,并没有做出来,但是赛后又是通过lsr大佬的帮助,明白了这道题:
凉肝的比赛_第2张图片
比赛后补题,死活出不来,没想到最后卡我的是long long int QAQ。

#include
#include
#include
#include
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		long long n,k=1,a[100005],sum=0,ans=0,ans1=0,ans2=0;
		scanf("%lld",&n);
		for(int i=1;i<=n;i++)
		{
			scanf("%lld",&a[i]);
			sum+=a[i];
		}
		for(int i=1;i<=n;i++)
		{
			ans1+=a[i];
			ans2+=a[n-i+1];
			if(ans1<=0||ans2<=0)
			{
				k=0;
				break;
			}
		}
		if(k)printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

C - Fadi and LCM

C题理解了题目要求就直接模拟就好了。

#include
#include
#include
#include
using namespace std;
int main()
{
	long long x,a,b;
	scanf("%lld",&x);
	a=sqrt(x);
	while(1)
	{
		if(x%a==0)
		{
			if(__gcd(a,x/a)==1)
			{
				break;
			}
		}
		a--;
	}
	printf("%lld %lld",a,x/a);
	return 0;
}

D - Dr. Evil Underscores

D题是给一个数组,找出一个数X使得用X异或整个数组,所得的最大值最小(听上去很绕)。因为异或的性质,可以用二进制来操作,当数组中所有数的二进制形式,某一位都为1或者都为0,则可以忽略,而若0和1同时存在,该位上的1就无法避免,就可以分两种情况进行讨论从而分治,当取0是该位为0的可以忽略,只考虑该位为1的数就行,当为1时则反向操作。
会用到vector的有关知识请自行百度。

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int dfs(int y,vector<int> &x)
{
	vector<int>x0,x1;
	if(y<=0)
		return 0;
	for(int o=0;o<x.size();o++)
	{
		int tt=x[o],ttt=x[o]^y;
		if(ttt<tt)
			x1.push_back(tt);
		else
			x0.push_back(tt);
	}
	if(x0.size()==0)
	{
		int m=dfs(y/2,x1);
		return m;
	}
	if(x1.size()==0)
	{
		int m=dfs(y/2,x0);
		return m;
	}
	int m0=dfs(y/2,x0),m1=dfs(y/2,x1);
	int m=min(m0,m1)+y;
	return m;
}
vector<int>v;
int main()
{
	int ans,k=1,n,t;
	vector<int>a;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&t);
		a.push_back(t);
		while(k<t)
		{
			k*=2;
		}
	}
	ans=dfs(k,a);
	printf("%d",ans);
}

E - Deadline

E题算是一道数学题,看懂公式之后,在用高中学过的基本不等式公式即可求出,基本不等式公式为下图:
在这里插入图片描述

#include
#include
#include
#include
#include
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		double b,n,d,ans=0;
		scanf("%lf%lf",&n,&d);
		b=sqrt(d);
		ans=2*b-1;
		if(ans<=n) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

F - Yet Another Meme Problem

F题可用打表找规律得出,只有当b取9或99或999…即在十进制下再增加1可以进一位的数时,a取任何值都满足条件。

#include
#include
#include
#include
#include
using namespace std;
long long x[10]={0,9,99,999,9999,99999,999999,9999999,99999999,999999999};
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		long long a,b,k;
		scanf("%lld%lld",&a,&b);
		for(int i=0;i<=9;i++)
		{
			if(b>=x[i])
			{
				k=i;
			}
		}
		printf("%lld\n",a*k);
	}
	return 0;
}

G - HQ9+

看懂题目,查看输入程序中是否含有’H’ ‘Q’ '9’这三个字符,有输出YES,否则NO

#include
#include
#include
#include
#include
using namespace std;
int main()
{
	int l,k=0;
	char a[200];
	scanf("%s",a);
	l=strlen(a);
	for(int i=0;i<l;i++)
	{
		if(a[i]=='H'||a[i]=='Q'||a[i]=='9')
		{
			k++;
			break;
		}
	}
	if(k)printf("YES");
	else printf("NO");
	return 0;
}

H - Rolling The Polygon

H题的难点在于计算多边形各个角的角度,需要运用C++中的数学公式。

你可能感兴趣的:(凉肝的比赛)