题目 1 :9数算式
题目2:山
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// static StreamTokenizer st = new StreamTokenizer(in);
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
static int N = (int)1e5 + 10, n;
static int[] a = new int[N];
public static boolean check(int x, int choose) {
int lower = 0, upper = 0;
for (int i = 0; i < n; i++) {
lower += a[i] < x? 1: 0;
upper += a[i] > x? 1: 0;
}
if (choose == 1) return lower >= upper;
return lower <= upper;
}
public static void main(String[] args) throws Exception {
n = Integer.parseInt(in.readLine());
String[] s = in.readLine().split(" ");
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(s[i]);
}
int l = 0, r = 100000;
while (l < r) {
int mid = l + ((r - l) >> 1);
if (check(mid, 1)) {
r = mid;
} else {
l = mid + 1;
}
}
int mx = l;
l = 0;
r = 100000;
while (l < r) {
int mid = l + ((r - l + 1) >> 1);
if (check(mid, -1)) {
l = mid;
} else {
r = mid - 1;
}
}
int mn = l;
// out.println(mx + " " + mn);
for (int i = 0; i < n; i++) {
if (a[i] >= mx) {
out.print(0 + " ");
} else {
out.print(mn - a[i] + 1 + " ");
}
}
out.flush();
in.close();
}
}
题目4:完全平方数
前置知识:分解质因数、唯一分解定理
如果 x 为一个完全平方数,我们设 y * y = x,根据唯一分解定理,任何一个非质数都可以表示成 n 个质数的乘积形式
如果某一个质数出现了奇数次,那么 y * y 可以让这个质数出现偶数次
如果某一个质数出现了偶数次,那么 y * y 不会影响这个质数出现次数的奇偶性
得到结论:如果一个数是一个完全平方数,则其所有质因子出现的频率均为偶数
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static void main(String[] args) throws Exception {
long num = Long.parseLong(in.readLine());
long ans = 1, p = 2;
while (p * p <= num) {
int count = 0;
while (num % p == 0) {
num /= p;
count++;
}
if ((count & 1) == 1) ans *= p;
p++;
}
if (num > 1) ans *= num;
out.println(ans);
out.flush();
in.close();
}
}