2020年2月15日牛客寒假训练赛5

目录

  • E- Enjoy the game
  • I-I题是个签到题
  • J-牛牛战队的秀场

补没做出来能补的或者有坑的题

E- Enjoy the game

题目数据及要求:
2020年2月15日牛客寒假训练赛5_第1张图片

解法:就是找规律的题,我找的时候又算错了,服了自己了,规律就是2的n的式子则先手没有必胜策略,其他的则先手有必胜策略

代码:

#include
const long long k=1e9; 
using namespace std;
int main()
{
	long long n;
	cin>>n;
	long long a=2;
	for(int i=1;i<=60;i++)
	{
		if(a==n)
		{
				cout<<"Alice"<<endl; 
				return 0;
		}
		a=a*2;
	
	}
	cout<<"Bob"<<endl;
 } 

I-I题是个签到题

题目数据及要求:
2020年2月15日牛客寒假训练赛5_第2张图片

赛中补充:可以是并列的前三,按照正常的逻辑顺序排序

解法:这个正常的逻辑顺序就很迷,其实就是比I题过的多的人数不超过两个

代码:

#include//就是比他多的不超过2道
using namespace std;
struct w{
	int index;
	int x;
	friend bool operator <(w a, w b)
	{
		return a.x>b.x;
	}
}a[1010]; 
int p[5];
int main()
{
	bool flag1=false,flag2=false;
	int n,m,k,index=1,u,sum=0;
	cin>>n>>m;
	k=ceil(0.8*m); 
	for(int i=1;i<=n;i++)
   {
   	cin>>a[i].x;
   	a[i].index=i;
   }
   u=a[9].x;
   if(a[9].x>=k){
   	flag1=true;
   }
   if(flag1==false)
   {
   	
   sort(a+1,a+1+n);
   for(int i=1;i<=n;i++)
   {
   	if(a[i].x>u)
   	{
   		sum++;
	   }
	   if(a[i].index==9)
	   break;
   }
   if(sum<=2)
   flag2=true;
   

}
if(flag1||flag2)
{
	cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
	
 } 

J-牛牛战队的秀场

题目数据及要求:
2020年2月15日牛客寒假训练赛5_第3张图片

解法:要学一下,对于圆内接正n变形,其边长为r*sin(360/n)*cos(180/n),需要顺时针逆时针走的步长都算取小的,这里很迷的就是,题目说的n,r都是整数我定义成int就不过,double就可以过。

代码:

#include
#include
using namespace std;
const double pi=acos(-1.0);//表示弧度π
int main()
{   int n; 
	double l,sum1,sum2,r;//必须定义n,r为double,不然就错,服了 
	cin>>n>>r;
	l=1.0*r*sin(1.0*(360/n)*pi/180)/cos(1.0*(180/n)*pi/180);
	int i,j,k,z,q;
	cin>>i>>j;
	k=min(i,j);
	z=max(i,j);
	sum1=(z-k)*l;
	q=z-k;
	sum2=(n-q)*l;
	sum1=min(sum1,sum2);
	
	
	printf("%.6f\n",sum1);
	
	
	
	
 } 

你可能感兴趣的:(2020年2月15日牛客寒假训练赛5)