0%

新生赛

L. 恭喜edg夺得S11冠军

纯属签到题 细致一点就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
int main(){
printf("EDGNBEDGNBEDGNBEDGNBEDGNBEDGNBEDGNB\n");
printf("EDGNBEDGNBEDGNBEDGNBEDGNBEDGNBEDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf(" EDGNB\n");
printf("EDGNB");
return 0;
}

A. 阳阳姐的魔力数

描述

对于我们的出色的冒险者阳阳姐来说,魔力数对他有奇特的作用,能在战斗中助他一臂之力,所以他知道的魔力数越多越好,但是令他头疼的是,他不知道范围NN之内的自然数有多少个魔力数,于是他向你求助,你能帮帮他吗。 一个自然数有魔力,当且仅当这个自然数数可以由两个相同的自然数拼接起来,比如”2020”这个数字就是由两个”20”拼接而成,但是”2002”却不是魔力数,因为”20”和”02”是两个不同的数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.*;
class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
long n = scan.nextLong();
long sum =0;
String s = n+"";
String[] str = {"9","99","999","9999","99999","999999","9999999","99999999","999999999","9999999999"};
int m = s.length();
int k = m/2;
if(n<100){
if(n<11) System.out.print(0);
else if(n<22) System.out.print(1);
else if(n<33) System.out.print(2);
else if(n<44) System.out.print(3);
else if(n<55) System.out.print(4);
else if(n<66) System.out.print(5);
else if(n<77) System.out.print(6);
else if(n<88) System.out.print(7);
else if(n<99) System.out.print(8);
else if(n==99) System.out.print(9);
}
else{
if(m%2==1)
{
System.out.print(str[k-1]);
}
else{
String string ="";
String string1 ="";
for(int i = 0,j=k;i < k;i++,j++)
{
String t = s.charAt(i)+"";
String t1 = s.charAt(j)+"";
string = string+t;
string1 = string1+t1;
}
int a = Integer.parseInt(string);
int b = Integer.parseInt(string1);
if(a<=b)
{int q = (int) (Integer.parseInt(string)-Math.pow(10,(m/2)-1)+1);
int p = Integer.parseInt(str[(m/2)-2]);
System.out.print(q+p);}
else{
int q = (int) (Integer.parseInt(string)-Math.pow(10, (m/2)-1));
int p = Integer.parseInt(str[(m/2)-2]);
System.out.print(q+p);
}
}
}

}
}

这题有着更好的方法 纯数学题 我直接吧所有情况考虑上了

奇数位的时候为固定数 不满足魔力数

偶数为为前一半的值本身或者减一 看前面一半和后面一半谁大

Yuuki非常喜欢玩APEX,一天不玩就浑身难受,可是为了通过考试,他不得不将部分时间花在学习上来维持段位和分数的平衡

给定一个字符串s,字符串s只由字符a和字符b组成,其中a代表Yuuki那天玩APEX,b代表学习

因为Yuuki非常喜欢1010这个数字,所以他规定:在连续的十天之内,玩游戏和学习的天数必须一致

是否存在连续1010天的区间[l,r][l,r],即r-l+1=10rl+1=10。 使得Yuuki游戏和学习的天数一样多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String s = scan.next();
if(n < 10){ System.out.print("Yuuki is unhappy");}
else{
int l = 0,r=10;
while(r <=n)
{
int p=0,q=0;
for(;l<r;l++){
if(s.charAt(l)=='a') p++;
else q++;
}
if(p==5&&q==5) {System.out.println(r-9+" "+r);
break;}
else {
r++;
l = r-10;
}
}
if(r > n) System.out.print("Yuuki is unhappy");
}
}
}

这题卡回车

卡了半个小时 挺恶心的 。。。。

G. nero想出勤

描述

又是阳光明媚的一天,看着这么好的天气,nero想要出勤。

但是nero一个人出勤很无聊,于是拉着lock一起出勤。

他们俩一起走到了出发的起点,由于nero觉得慢慢走路很无聊,所以nero想到了一个主意,就是两个人轮流决定前进的方向,nero希望能够上下走,而lock希望能够左右走。

每一回合他们会根据上述的规则决定前进的方向,然后朝着决定的方向前进一步。

由于他们俩都有选择困难症,不知道谁优先决定前进的方向,于是他们把这个困难的任务交给了你,你可以任意选择谁优先,希望你能够告诉他们能否从起点到达出勤的目的地,如果能,请求出所需要的最小步数。

输入

第一行输入一个整数 t(1\leq t \leq 10^5)t(1≤t≤105),代表tt组样例,每组样例有两行输入。

对于每一组样例:

第一行输入两个整数sys**y和sx(-10^9\leq sx,sy\leq 10^9)s**x(−109≤s**x,s**y≤109),分别代表起点的纵坐标sys**y和起点的横坐标sxs**x

第二行输入两个整数eye**y和ex(-10^9\leq ex,ey\leq 10^9)e**x(−109≤e**x,e**y≤109),分别代表终点的纵坐标eye**y和起点的横坐标exe**x

输出

对于每一组样例:

第一行输出能否到达目的地。

如果能,输出”YES”(不包含引号),否则输出”NO“(不包含引号)。

如果能够到达目的地,在第二行输出所需的最小步数,定义每一步为坐标加一或者减一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.*;
class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
long []arr = new long[2];
long []arr2 = new long[2];
for(int i = 0;i < n;i++)
{
arr[0] = scan.nextLong();
arr[1] = scan.nextLong();
arr2[0] = scan.nextLong();
arr2[1] = scan.nextLong();
long x = Math.abs(arr[0]-arr2[0]);
long y = Math.abs(arr[1]-arr2[1]);
long z = Math.min(x, y);
long sum = z*2;
long p = Math.max(x,y);
p = p-z;
if(p%2==0) sum = sum + p*2;
else sum = sum +(p*2)-1;
System.out.println("YES");
System.out.println(sum);
}

}
}

单纯的模拟题 只是这里就需要回车了 卡的我头大了

K. 樊学长的馈赠

描述

fzx学长是一位非常厉害的老学长,他在备战考研时依旧挂念着我们的小萌新们,于是他特意给大家出了一道有意思的题目:
在茫茫大海中有n座独立的岛屿,岛上生活着一些淳朴善良的村民。
但是有一天,大海上出现了一群可怕的海盗,海盗们虽然不敢直接攻击岛屿,但是会在海上等待他们出来捕鱼,然后趁机袭击他们。
村民们为了抵御海盗,决定与其他岛屿结成攻守同盟,现在你需要为他们规划航线,使得n个岛屿形成一个整体(从任意一个岛屿出发,都能到达其他的n-1个岛屿)。
但是由于村民们没有接受过现代化的教育,所以他们看不懂你画的航线图,所以你只能告诉他们要设立一些航线,村民们会随机选择两个之前没有建立过航线的岛屿,在两个岛屿之间建立一条航线。
但是设立航线也是很麻烦的事情,为了尽快组成同盟抵御海盗,你需要找到一个最小的航线数量m,确保n个岛屿一定能形成一个整体。
***注意:一条航线可以看作连接两个岛屿**u**和*v*的一条边,相同的两个岛屿之间不会有重复的航线,同时也不会有岛屿规划到自己本身的航线*

输入

第一行输入一个整数t(t\leq 5 \times 10^5)t(t≤5×105),代表有tt个样例。
每组样例有一行,输入一个整数n(1 < n \leq 10^9)n(1<n≤109),代表有nn个独立的岛屿。

输出

每个样例输出一行,一行包含一个正整数mm代表生成的航线数量。

样例

输入复制

1
2
1
3

输出复制

1
2

输入复制

1
2
3
2
4
5

输出复制

1
2
4
7

输入复制

1
2
1
65536

输出复制

1
2147385346

这题看题目根本没用 直接撸样例 还是能够通过65536和2147385346

后者的位数是前者的两倍

32751是65536差不多1/2

经过观察 是(n-1)*(n-2)/2+1;

不过可惜的是赛后几分钟想出来了

不过结果还行 二等奖 不过A了这题的话就是第一名了

不过刷了二个月力扣还算不错的回馈