持续更新中
- 1、[A. Entertainment in MAC](https://codeforces.com/problemset/problem/1935/A)
- 2、[B. Sasha and the Drawing](https://codeforces.com/problemset/problem/1929/B)
- 3、[A. Sasha and the Beautiful Array](https://codeforces.com/problemset/problem/1929/A)
- 4、[A. Insomnia cure](https://codeforces.com/problemset/problem/148/A)
- 5、[A. Levko and Table](https://codeforces.com/problemset/problem/361/A)
1、A. Entertainment in MAC
1、添加反转字符串到末尾:这个操作使字符串长度加倍,但如果原字符串不是字典序最小,这种操作可能不会带来最小字典序的结果。
2、反转字符串:单次反转可能会提高或降低字符串的字典序,取决于原字符串。重要的是,连续两次反转将恢复原字符串。
n一定是偶数,要么翻转偶数次不变,要么翻转再添加,再翻转偶数次不变,那么n可以看成2
如果这个字符串比它的逆序串小或等于,那么原样输出。否则输出翻转后的串+原来的串
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
while(m -- != 0) {
int n = in.nextInt();
String s = in.next();
String str = new StringBuffer(s).reverse().toString();
if(s.compareTo(str) <= 0)
System.out.println(s);
else
System.out.println(str + s);
}
}
}
2、B. Sasha and the Drawing
k个对角线,至少经过几个格子
第一行 n 个格子提供 2 * n 条对角线,最后一行左右两边的格子提供 2 条对角线,剩下(n - 2)个格子提供 2 * (n - 2) 条对角线就能覆盖所有的网格,加起来一共 4n - 2 条对角线
如果 k == 4n - 2,最少能覆盖到2 * n 个格子
如果 k < 4n - 2 ,一个格子提供2个对角线,如果k为奇数,需要 k / 2 + 1个格子,多出来的格子在已经有一条对角线的延长线上,否则需要k/2个格子
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
while(m -- > 0) {
int n = in.nextInt();
int k = in.nextInt();
if(k == 4 * n - 2)
System.out.println(2 * n);
else if(k % 2 == 1)
System.out.println(k / 2 + 1);
else
System.out.println(k / 2);
}
}
}
3、A. Sasha and the Beautiful Array
排序化简
a2 - a1 + a3 - a2 + … + an - an-1 = an - a1
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
while(t -- > 0) {
int n = in.nextInt();
int[] a = new int[n];
for(int i = 0; i < n; i ++)
a[i] = in.nextInt();
Arrays.sort(a);
System.out.println(a[n - 1] - a[0]);
}
}
}
4、A. Insomnia cure
求被k,l,m,n其中一个整除的个数
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int k = in.nextInt();
int l = in.nextInt();
int m = in.nextInt();
int n = in.nextInt();
int d = in.nextInt();
int res = 0;
for(int i = 1; i <= d; i ++) {
if(i % k == 0 || i % l == 0 || i % m == 0 || i % n == 0)
res ++;
}
System.out.println(res);
}
}
5、A. Levko and Table
构造一个长宽都是 n 且每行每列的和都是 k 的矩形
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[][] a = new int[n][n];
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++) {
if(i == j)
a[i][j] = k - n + 1;
else
a[i][j] = 1;
}
for(int[] row : a) {
for(int num : row)
System.out.print(num + " ");
System.out.println();
}
}
}