赛后题解11月 月赛 总题数11,4未解;

错题1:

在连续几天的没日没夜后,wy学姐颤颤巍巍地翻出了一个珍藏多年的宝典,只见上面赫然写着——《凡人修仙传》!
她正在可怜兮兮地临时抱佛脚来试图提升自己目前的实力以获得最后的胜利。

事情是这样的,wy学姐本来卡在瓶颈期多年,经过前几天的修炼,隐隐有突破之势,如今金身已就,眼看神功大成,只差渡劫!
就在这时,天空一道惊雷,她落入了一个结界之中,这正是她飞升的最后一道关卡!

这个结界里有很多斗法者,而她需要与其中的优胜斗法者(即最后的胜利者)进行对决,赢则飞升。

为了渡过此劫、成功飞升,谨慎起见,她决定先打探一下对手的情况。

那些人的斗法是这样的,n个斗法者排成一队(随机),前俩名斗法者打一场,输的人 走到队伍的最后,赢的人继续与下一个斗法者对决,依次类推,直到有人能连胜k场为止。

对于这种修仙对决,自然是修炼层数越高的人能获胜啦。

正所谓知己知彼,百战不殆。
wy学姐坚信,只要能提前准确地预测出她的对手,她就能在这短暂的时间内找到越级(或许不是呢qwq)挑战胜利的办法!

你能帮她找到修练到多少层的人会获胜吗?

Input

第一行输入两个整数: n and k (2 ≤ n ≤ 500, 2 ≤ k ≤ 1012) ——n代表排队的斗法者人数,k代表要连胜的场数

第二行有 n 个整数 a1, a2, ..., an (1 ≤ ai ≤ n)——即队伍中每个人修炼神功的层数。保证每个人各不相同。

Output

输出一个整数——最后的优胜斗法者修炼到的功力层数.

Examples

Input

2 2
1 2
Output


Input

4 2
3 1 2 4
Output


Input

6 2
6 5 3 1 2 4
Output


Input

2 10000000000
2 1
Output

2
Note

第二个样例解释

3 和1打. 3 赢. 1 到最后面去

3 和 2打. 3 赢. 他获得两场胜利,所以他是最后的赢家

解题方法:

这题我一开始 是把数组重复一遍去模拟比赛模式的  逐个遍历,但是一直错在了test 33。

后面发现如果前面的人数没打过后面的人 那么接下来胜利的人肯定可以打过前面所有的人   那么他就只需要胜利 k-i场就好了  然后如果 都没满足 就只需要输出最大的那个人就ok了 

不难发现,因为输出条件最大值肯定是n ,所以最大值直接输出n就好了   接下来是代码  :

#include<iostream>
using namespace std;
int main()
{
    int n,a[505],max=-1;
    long long k;
    cin>>n>>k;
    int i,j;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(i=0;i<n;i++)
    {
        int h=a[i];
        for(j=i+1;j<n;j++)
        {
            if(a[i]<a[j])
            {
                if(i==0&&(j-i>k)||i!=0&&(j-i)>=k)
                {
                    cout<<a[i]<<endl;
                    return 0;
                }
                i=j-1;
                break;
            }
        }
        if(j>=n)
        {
            if(i==0&&(j-i>k)||i!=0&&(j-i)>=k){
                cout<<a[i]<<endl;
                return 0;
            }
        }
    }
    cout<<n<<endl;
}

错题2:

天气冷了。

wy学姐玩起了卡牌游戏,她遇到了一个特殊关卡。
在这个关卡中,她只有数字为0或数字为5的卡牌可以打出伤害(把这些卡片上的数字排列成一排即为造成的伤害值)。
Of course,这个特殊的关卡有一个特殊的大BOSS,只有造成90的倍数的伤害值才有效果,否则BOSS将直接免疫伤害值。

天气越来越冷了。

wy学姐不想思考,于是她随机选择了幸运的你,来帮她解决这个问题——手中摸到的牌能打出的最大伤害数是多少?
注意:她可以不把卡牌全部用完。

Input

第一行是一个整数 n (1 ≤ n ≤ 103).
第二行是 n 个整数 a1, a2, ..., an (ai = 0 or ai = 5). 数 ai 即 i-th 卡片上的数字.

Output

输出一个数——造成的最大伤害(90的倍数)。
如果手中的卡牌无法生成90倍数的伤害值,则输出-1.

Examples

Input

4
5 0 5 0
Output

0
Input

11
5 5 5 5 5 5 5 5 0 5 5
Output

5555555550
Note

在第一个测试中,您只能生成一个 90 的倍数 —— 0。

在第二个测试中,您可以生成数 5555555550,它是 90 的倍数。

赛后题解:

比赛的时候以为这道题挺难的后面发现原来这么简单,在题目中不难发现 ,需要用“5”与“0”构成90的倍数的话  我们只需要有9的倍数个“5”然后后面加一个0就是了,因此我们需要做的就是把 5与0出现的次数统计出来 ,再判断满足条件与否 就欧克了!

#include<iostream>
using namespace std;
int main()
{
	int suma=0,sum0=0,a;
	int n;
	cin>>n;
	while(n--)
	{
		cin>>a;
		if(a==5)	suma++;
		if(a==0)	sum0++;
	}
	if(sum0<1)	cout<<"-1"<<endl;
	else
	{
		if(suma<9) 
			cout<<"0"<<endl;
		else{
			for(int i=0;i<suma/9;i++)
				cout<<"555555555";
			for(int i=0;i<sum0;i++)
			{
				cout<<"0";
			}
		}
	}
}

错题3:

众所周知,wy学姐心灵手巧,她最近在学习原画,立志往国风和赛博朋克风格发展。

绘画的工具是很重要哒!

于是思量再三+长期吃土后,她买了一支biulingbiuling~闪的魔法棒画笔,由于刚刚接触,wy学姐还没有领悟到其中的奥秘所在,她只会以普通画笔的方式去使用它。

wy学姐决定用它来练习画直线,于是她在平面直角坐标系中画出了如下的图形:

善于思考的wy学姐发现!她随手一画的图竟然是有点规则的!!OMG!!!

于是她决定考考你是否也发现了这个神奇美妙的规则,是否感悟到了数学的诱人的魅力和本质?


wy学姐会随机给出两个点,要求你算出连接两点的折线长度(即沿折线走的路线长度)。

做题思路 :

这道题 看上去好像很高级  但实际上有规律可寻;

我们只需要分别求两个点分别到原点的距离  然后相减 再求绝对值就可以得到答案 。

我们在求 到原点的距离的时候我们可以  分两步去求   先求 斜率为 -1的线段的长度 再求  另外一根   斜率为-1的线段的长度 十分好求,我们只需要 把坐标x,y相加 然后 用for循环      去存i倍1.414就好了    但是别忘了最后加一个x倍的1.414唔;另外一个根直接用勾股定理 求解就好了  

接下来是ac代码:
 

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
 
double fun(double x,double y)
{
	double m=sqrt(2.0),ans=0.0;
	int n=x+y;
	for(int i=0;i<n;i++)
		ans+=i*m;
	ans+=x*m;
	for(int i=0;i<n;i++)
		ans+=sqrt(i*i+(i+1)*(i+1));
	return ans;
}
 
 
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int x1,x2,y1,y2;
		cin>>x1>>y1>>x2>>y2;
		double result=fabs(fun(x1,y1)-fun(x2,y2));
		printf("%.3f\n",result);
	}
}

众所周知,yh学长 is very rich,他靠着玩超级大富翁的游戏富上加富,买下了地球的半座江山(另外半座他不想要啦!)。

Of course,yh学长啥都有,这其中当然也包括养猪场。

这天,yh学长正在养猪场里跟它们一起玩,他心血来潮点了个到:“花花、茉莉、小爱、仙子……???仙子呢?!Where are my dear Xianzi???!!!”
yh学长忽然发现名为“仙子”的小粉猪不见了!Oh no!这可是他最心爱的一头猪!!!
幸好yh学长在每只猪的身上都安装了高级GPS定位导航,通过智能腕表,他可以实时知道“仙子”的位置。

yh学长从一条直线上的一个点N (0 ≤ N ≤ 100,000) 开始,“仙子”在同一直线上的一个点K (0 ≤ K ≤ 100,000) 上。

yh学长迫不及待地想把“仙子”带回来,他决定现在就出发去找它。
可是作为一个 richer ,可选择的交通方式实在是太多了,到底要用什么交通方式去找呢?
yh学长想起“仙子”最爱的两个交通工具—— 南瓜老年代步车 以及 超级无敌霹雳豪华完美小巧简易宇宙飞船。

南瓜老年代步车南瓜老年代步车——yh学长可以在一分钟内从任何一点X移动到X-1或X+1两点。
超级无敌霹雳豪华完美小巧简易宇宙飞船超级无敌霹雳豪华完美小巧简易宇宙飞船——yh学长可以在一分钟内从任何X点移动到2*X点。

已知“仙子”在离家出走一段时间后就反悔了,
十分地想念yh学长(这就是双向奔赴吗(T▽T)磕到了磕到了ヾ(◍°∇°◍)ノ゙),
但它太累了,于是决定在原地不动等yh学长来找它。

请问yh学长至少需要多长时间才能把它找回来?

Input

第一行输入两个整数 N 和 K

Output

输出一个整数——yh学长至少花多长时间才能把“仙子”找回来?

Sample Input

5 17

Sample Output

4

Hint

yh学长到达“仙子”所在地的最快方法是沿着以下路径移动:5-10-9-18-17,这需要4分钟。

解题思路 :

这道题其实非常简单 ,虽然我当时没有做出来,但是 学习了 BFS之后 就轻轻松松了

至于bfs怎么理解  且看:bfs详解_逍遥-CSDN博客_bfs

接下来是我的ac代码:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;

const int maxn=100001;
int step[maxn];
bool vis[maxn];
queue<int> q;
int bfs(int n,int k)
{
	int head,next,i;
	q.push(n);
	step[n]=0;
	while(!q.empty())
	{
		head=q.front();
		q.pop();
		for(i=0;i<3;i++)
		{
			if(i==0)	next=head-1;
			else if(i==1)	next=head+1;
			else next=2*head;
			if(next<0||next>=maxn) continue;
			if(!vis[next])
			{
				q.push(next);
				step[next]=step[head]+1;
				vis[next]=true;
			}
			if(next==k)
				return step[next];
		}
	
	}
	
}
int main ()
{
	int n,k;
	scanf("%d%d",&n,&k);
	while(!q.empty())	q.pop();
	memset(step,0,sizeof(step));
	memset(vis,false,sizeof(vis));
	if(n>=k)
		printf("%d\n",n-k);
	else printf("%d\n",bfs(n,k));
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值