目录

A-可以教学姐画画嘛QAQ

B-yh学长的养猪场

C-可以帮学姐通关吗

D-宝藏男孩zks

E-为了lh学长!冲鸭!

F-可以收下lh学长的小心心♥嘛~~~

G-金身已成,只待渡劫!


A-可以教学姐画画嘛QAQ

题:

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

绘画的工具是很重要哒!

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

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

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

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

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

Input

第一个数是正整数N(≤100)。代表数据的组数。
每组数据由四个非负整数组成x1,y1,x2,y2;所有的数都不会大于100。

Output

对于每组数据,输出两点(x1,y1),(x2,y2)之间的折线距离。注意输出结果精确到小数点后3位。

Sample Input

5
0 0 0 1
0 0 1 0
2 3 3 1
99 99 9 9
5 5 5 5

Sample Output

1.000
2.414
10.646
54985.047
0.000

思路:

据观察图形可以发现以下几点规律:从(0,0)点到(i,0)点间线段长度f(i) = f(i-1)+sqrt(i*i)+sqrt(i*(i-1));

任意非零两点间( (x1,y1)到(x2,y2) )的距离等于:

f(x2+y2)-f(x1+y1) +sqrt((x1+y1)*(x1+y1)*2)/(x1+y1)*y1 - sqrt((x2+y2)*(x2+y2)*2)/(x2+y2)*y2.

其中一点为(0,0)时的距离等于:f(x+y)- sqrt((x+y)*(x+y)*2)/(x+y)*y。

#include<stdio.h>
#include<math.h>
int main()
{int N;int i;int x1, x2, y1, y2;double f[201];//注意:x1,y1,x2,y2最大值为100,所以横纵坐标最大值为200,有201个整数。 double sum;scanf("%d", &N);f[0] = 0;for(i=1; i<=200; i++)f[i] = f[i-1] + sqrt(1.0*i*i+1.0*i*i) + sqrt(1.0*i*i+(i-1)*(i-1));//(0,0)到(i,0)的长度。 while(N){scanf("%d %d %d %d", &x1, &y1, &x2, &y2);//任意两点的长度。 if(x1==x2 && y1==y2)sum = 0;if(x1==0 && y1==0)sum = f[x2+y2] - sqrt((x2+y2)*(x2+y2)*2.0)/(x2+y2)*y2;else if(x2==0 && y2==0)sum = f[x1+y1] - sqrt((x1+y1)*(x1+y1)*2.0)/(x1+y1)*y1;else if(x1+y1<x2+y2)sum = f[x2+y2]-f[x1+y1] + sqrt((x1+y1)*(x1+y1)*2.0)/(x1+y1)*y1 - sqrt((x2+y2)*(x2+y2)*2.0)/(x2+y2)*y2;elsesum = f[x1+y1]-f[x2+y2] + sqrt((x2+y2)*(x2+y2)*2.0)/(x2+y2)*y2 - sqrt((x1+y1)*(x1+y1)*2.0)/(x1+y1)*y1;printf("%.3f\n", fabs(sum));N --;}return 0;
}

B-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分钟。

思路:

遍历每一种走法,并存储学长走到的每一个位置所用的步数,并标记防止再次访问。(访问重复的位置,必然浪费了时间,不是最短时间)直到到达目的,然后输出用时即可。

#include<queue>
#include<iostream>
#define N 100001
using namespace std;
struct location{bool vis;//记录是否访问 int step;//记录所走步数
} l[N];
queue<int>s;
int bfs(int n, int k)
{int head, next;//head当前所在位置, next下一步的位置。s.push(n);//记录初始位置.l[n].step = 0;l[n].vis = true;int i;while(1){head =  s.front();s.pop();for(i=0; i<3; i++)//3种走法。{if(i==0)next = head - 1;else if(i==1)next = head + 1;else next = head * 2;if(next<0 || next >N)//排除出界的情况。 continue;if(!l[next].vis)//如果没被标记。 {s.push(next);l[next].vis = true;//标记以访问。 l[next].step = l[head].step + 1;}if(next==k) //遍历到结果 return l[next].step;}}
}
int main()
{int n, k;cin >> n >> k;if(n>=k)cout << n - k << endl;//当n大于k时只能一步步往回走。elsecout << bfs(n,k) << endl;return 0;
}

C-可以帮学姐通关吗

题:

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的个数大于等于9,并且至少含有一个0,这个数才可能是90的非零倍数。所以首先用数组存储卡牌上的数字的个数。然后又由题可知,n最大值为1000, 所以输出数最大可能为1000位数,所以应该用字符串输出。

#include<bits/stdc++.h>
using namespace std;
int main()
{int n;int a[1000];int i;int n0 = 0;int n5 = 0;cin >> n;for(i=0; i<n; i++){cin >> a[i];if(a[i]==0)n0 ++;//记录0的个数。 else if(a[i]==5)n5 ++;//记录5的个数。 }if(n5/9 && n0){int yu = n5 / 9;while(yu)//根据n5>=9的多少倍,来决定输出9个5的次数 {yu --;cout << "555555555";}while(n0)//输出0 {n0--;cout << "0";}}else{if(n0)cout << "0" << endl;elsecout << "-1" << endl;}return 0;
}

D-宝藏男孩zks

题:

zks会长梦见一片充满宝藏的沙滩, 它是由若干正方形的块状土地组成的一个W*H矩形区域。zks会长决定挖出这片沙滩所有的宝藏,成为传说中的宝藏男孩!!!

不幸的是,在他挖第二块地时就触发了埋藏其中的地雷,他直接被从宿舍的床上炸醒。
他恍然大悟,原来这片沙滩上的每一块地,除了宝藏,还有可能是地雷!

故事没有就这样结束,第二天,他又做了相同的梦...

编写一个程序,计算出zks会长在被炸醒前可能挖到宝藏的最大数量。

Input

输入包含多组数据. 每组数据包含两个正整数W和H.

W表示行数, H表示列数. W和H不超过20.

每块地用字符表示如下:

'.' - 宝藏
'#' - 地雷
'@' - 起点(每组数据中只有一个,下面也有宝藏!)
输入 0 0 时程序结束

Output

对于每组数据,输出一个整数,即zks会长能挖到宝藏的最大数量。

Sample Input

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
11 6
..#..#..#..
..#..#..#..
..#..#..###
..#..#..#@.
..#..#..#..
..#..#..#..
7 7
..#.#..
..#.#..
###.###
...@...
###.###
..#.#..
..#.#..
0 0

Sample Output

45
59
6
13

思路:

首先通过数组来存储x坐标和y坐标的变化,再用for循环让其依次上下左右的移动到'.'的位置,然后每移动一次后再以其为新的起点继续重复以上的动作,直到走完所有的'.'即可。

#include<bits/stdc++.h>
using namespace std;
char road[21][21];
int H, W;
int cnt = 1;
int wa(int sx, int sy)
{int X[4] = {0, 0, 1, -1}; int Y[4] = {1, -1, 0, 0};//存储X和Y轴坐标的变化。int i;for(i=0; i<4; i++){if(sx+X[i]>=0 && sx+X[i]<H && sy+Y[i]>=0 && sy+Y[i]<W && (road[sx+X[i]][sy+Y[i]]=='.'))//依次让其左右上下地移动。 {road[sx+X[i]][sy+Y[i]]='#';//移动到新的位置后埋下地雷, 防止走回头路。 cnt ++;wa(sx+X[i], sy+Y[i]);//以新位置为新起点,继续重复动作。 }}return cnt;
}int main()
{int sx, sy;int i, j;while(cin >> W >> H && (H+W)){cnt = 1;for(i=0; i<H; i++)for(j=0; j<W; j++){cin >> road[i][j];if(road[i][j]=='@'){sx = i;sy = j;}}wa(sx, sy);cout << cnt << endl;}return 0;
}

E-为了lh学长!冲鸭!

题:

协会正在举行一场对外的加时赛,在这场比赛中有n个小队,依次从1到n进行编号。

每一轮比赛后剩下小队的ID会重新按照顺序依次编号,然后按以下顺序进行比赛:第一队和第二队比,第三队和第四队比,依此类推。

可以保证在每一轮比赛中都有偶数个队。每场比赛的获胜者晋级下一轮,失败者被淘汰出局,没有平局。在最后一轮比赛中,只剩下两支小队,这一轮被称为决赛,获胜者被称作冠军。

大家都希望lh学长带领的小队和hz学长带领的小队进入决赛。
不幸的是,球队ID已经被确定了,lh学长和hz学长可能不会在决赛中相遇,因为如果他们足够强大,他们将在更早的阶段相遇。

请你预测一下,lh学长所在的ID为a和hz学长所在的ID为b的小队将会在哪一轮中碰面。

注意:lh学长的小队和hz学长的小队是所有小队中最强的存在!!!

Input

唯一的行包含三个整数n,a和b (2≤n≤256,1≤a,b≤n) 分别为参加比赛的小队总数,lh学长所带领的小队编号,hz学长所带领的小队编号。可以保证,在每一轮比赛中,都有偶数个队晋级,并且a和b不相等。

Output

如果lh学长和hz学长可以在决赛中相遇,则输出唯一一行“Final!”(没有引号)

否则输出lh学长和hz学长相遇的轮数。轮数是从1开始累计的。

Examples

Input

4 1 2

Output

1

Input

8 2 6

Output

Final!

Input

8 7 5

Output

2

Note

在第一个例子中,lh学长所在的1队和hz学长所在的2队在第1轮相遇。

在第二个例子中,lh学长所在的2队和hz学长所在的6队只可能在第3轮决赛时相遇(他们战胜了之前的所有对手)。

在第三个例子中,lh学长所在的7队和hz学长所在的5队可以在第2轮相遇(他们都在第1轮中赢得了对手)。

思路:

用数组存储参赛的每一个队伍,让其两两对决,以此来模拟每一轮比赛,直到a和b相遇。

#include<bits/stdc++.h>
using namespace std;
int main()
{int d[265];//参赛队伍的数组。int k = 1;//数组的首个队伍。int n, a, b, i;int cnt = 0;//比赛轮数 cin >> n >> a >> b;for(i=1; i<=n; i++)d[i] = i;while(k){cnt ++;//增加轮数。 for(i=k; i<=n; i+=2){if((d[i]==a || d[i]==b) && ( d[i+1]==a || d[i+1]==b ))//当a b相遇时。 { if(k == n-1)cout << "Final!" << endl;elsecout << cnt << endl;break;}else if(d[i]==a || d[i]==b)//当其他数遇到a,b时,变为0 d[i+1] = 0;else if(d[i+1]==a || d[i+1]==b)d[i] = 0;else(d[i]>d[i+1])? d[i+1]=0 : d[i]=0;//设其他队伍比赛时,数值大的胜。 }sort(d+1, d+1+n);//排序, 把获胜的不为0的数放在后面。 if(i<=n)//i<=n代表没有循环完就结束了。 break;k = k+(n-k+1)/2;//此时数组的首个队伍 }return 0;
}

F-可以收下lh学长的小心心♥嘛~~~

题:

z-sort过的数组是这样的

  1. ai≥ ai - 1 (i是偶数)(i和i-1是下标)
  2. ai ≤ai - 1 (i是奇数,且i大于1)

[1,2,1,2] 和[1,1,1,1] 是z-sort过的  但是[1,2,3,4] 不是

lh学长将会给你一个数组,希望你可以帮他弄成z-sort过的,他将会奖励你他的小心心❤~~~

Input

第一行一个整数n (1 ≤ n ≤ 1000)

第二行n 个整数 ai (1 ≤ ai ≤ 109)

代表这个数组

Output

如果可以变成z-sort过的数组,就输出数组,否则输出 "Impossible".

Examples

Input

4
1 2 2 1

Output

1 2 1 2

Input

5
1 3 2 2 5

Output

1 5 2 3 2

思路:

根据公式(ai ≥ ai - 1 (i是偶数), ai ≤ ai - 1 (i是奇数,且i大于1))可知奇数位的数要比两边的数小,偶数位的数要比两边的要大,所以先把原数组从小到大(或从大到小)重新排列, 然后再按先填充奇数位再填充偶数位(或先偶后奇)的顺序组成新的数列即可。

#include<bits/stdc++.h>
using namespace std;
int main()
{int n;int a[1000];int b[1000];int i;int cnt = 0;scanf("%d", &n);for(i=0; i<n; i++)scanf("%d", &a[i]);sort(a, a+n);//排序, 从小到大。for(i=0; i<n; i+=2)//先填奇b[i] = a[cnt++];for(i=1; i<n; i+=2)//再填偶b[i] = a[cnt++];for(i=1; i<=n; i++){if((i%2==0 && a[i-1]<a[i-2]) && i%2!=0 && a[i-1]>a[i-2])break;}if(i<n){printf("Impossible\n");}else{for(i=0; i<n; i++)printf("%d ", b[i]);}return 0;
}

G-金身已成,只待渡劫!

题:

事情是这样的,wy学姐本来卡在瓶颈期多年,经过前几天的修炼,隐隐有突破之势,如今金身已就,眼看神功大成,只差渡劫!
就在这时,天空一道惊雷,她落入了一个结界之中,这正是她飞升的最后一道关卡!这个结界里有很多斗法者,而她需要与其中的优胜斗法者(即最后的胜利者)进行对决,赢则飞升。

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

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

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

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

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

Input

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

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

Output

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

Example

Input

4 2
3 1 2 4

Output

3

思路:

使用队列,让第一个人和第二个人对决,输的人重新入队到队列尾部。但注意:当队列上的第一人和第二人对决并输了时, 第二人胜场次数要加一。

#include<bits/stdc++.h>
using namespace std;
int main()
{int n;long long k;int x;int max;int t;int cnt;queue<int>a;int i;scanf("%d %lld", &n, &k);// 注意:k<=10^12 需要用long long类型 for(i=0; i<n; i++){scanf("%d", &x);a.push(x);}if(k>n)// 当所需连胜场数大于队列中的人数时,很明显只有队列里最强的人会胜出 {for(i=0; i<n; i++){if(i==0)max = a.front();else{if(max<a.front())max = a.front();}a.pop();}}elsefor(i=0; ; i++){max = a.front();a.pop();if(max>a.front()){t = a.front();a.front() = max;a.push(t);cnt ++;}else{cnt = 1; //第一人输了后,第二人胜利了一次。a.push(max);}if(cnt==k)break;}printf("%d\n", max);return 0;
}

2021.11.27月赛题解相关推荐

  1. 2021/11/27大数据1+XJava答案

    2021/11/27 步骤二 //已经提供Student类的属性,补充完成该类的有参(五个参数)及无参构造方法public Student(){}public Student(String name, ...

  2. 2021年第11月月赛题解akoj

    A.4和7? B.棋盘!! C.分数!!! D.小J和他的复习计划 E. 进度条 F 车牌号匹配 G.Happy Number H.给你一个签到题 I.砝码问题 J.阵前第一功 问题A解题思路 贪心, ...

  3. 2016/11/27月赛总结

    比赛链接:点这里  密码:ACM7114 题目: C - The calculation of GPA Time Limit:1000MS     Memory Limit:32768KB     6 ...

  4. csu-2018年11月月赛Round2-div1题解

    csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党, ...

  5. 「LuoguP4995」「洛谷11月月赛」 跳跳!(贪心

    题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去. 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 ii 块的石头高度为 h_ihi​,地面的高度是 h_0 = 0 ...

  6. 2021.11.8-11.14 AI行业周刊(第71期):AI行业经验

    篇章一:行业经验 不同的AI公司,对于AI产品的场景定位不同. 有的公司是面向C端产品.有的公司专门做B端用户. 当然大白所在的公司,也有具体的定位,主要面向智慧金融.智慧机场.智慧城市. 之前,一直 ...

  7. python爬虫爬美女图片:“小甲鱼056节轮一只爬虫的自我修养4:OOXX” 最终更新2021.6.27日,更新后可用!!!

    目录 2020.10.25日更新 代码: 2020.11.10日更新 代码 2021.6.27日更新,更新后可用 2020.10.25日更新 需要改动有两个方面: 第一方面,网址编码有变化,如http ...

  8. 2021.11.29-12.5 AI行业周刊(第74期):AI公司产品

    篇章一:AI公司产品 上周二去青岛,参加青岛市政府举办的AI百企百景线下资源对接会. 线下来了很多入驻青岛的企业,包括商汤科技,旷视科技,腾讯,科大讯飞,极视角等. 作为线下场景落地的三家典型企业,我 ...

  9. 2021.05.27 发表自己第一篇技术文章

    从昨晚开始做家庭财经系统.不要以为有系统两个字就怎么复杂,都是大家都会的.建库.建表. 第一个使用软件是mysql 2021.05.26 数据库 lianxi 已建好. 表 members_basic ...

最新文章

  1. Ponemon:2018年度数据泄露成本分析报告
  2. 说说如何基于 Vue.js 实现表格组件
  3. wxWidgets:使用通用对话框
  4. 回调地狱解决方案之Promise
  5. python实现装饰器_Python装饰器是怎么实现的?
  6. 机器学习实践指南(一)—— 总论
  7. 自动为数字千位数,百万位数添加逗号
  8. 互联网公司这一年,我被迫知道了这些内幕和秘密...
  9. CentOS 7 安装 daemontools
  10. 关于bss段的一些思考
  11. sqli-labs 前五关
  12. vuecli2+axios 设置多个域名代理
  13. testNG - 无法访问org.testng.Assert
  14. SpringSecurity 403 forbidden
  15. JavaScript实现左右分栏宽度拉伸
  16. python并发编程_《Python》并发编程
  17. XSCTF联合招新【真是阳间题】(MSIC+Crypto)
  18. 【Python毕业设计源码】python主机硬件配置推荐系统
  19. 仿QQ聊天软件及源码java版
  20. S32ds使用笔记3_debug错误

热门文章

  1. 支付业务与技术架构学习总结(10)——第三方支付账务系统论述
  2. 结构体对齐(字节对齐)规则及大小计算
  3. QT 简单五子棋实现
  4. win10安装mujoco一点细节
  5. 对路径“C:\inetpub\wwwroot\”的访问被拒绝
  6. IText_根据模板导出PDF(文字、表格、图片)
  7. GOP I帧和IDR帧
  8. 2021国防科技大学计算机学院无军籍考研经验贴
  9. 正则表达式(二)验证邮箱、电话号码
  10. 【渝粤教育】国家开放大学2018年春季 0553-21T色彩 参考试题