D Drop Voicing
队友过的,在环上找最大上升子序列
明天理解一下
E Bogo Sort
置换求环 + 大整数 + lcm
就是求出这个置换有多少环,然后对这些环的大小进行求lcm
对于置换求环
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5 + 5;
int p[N], ans[N], cnt;
bool vis[N];
int main(){
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
cin >> p[i]; // 置换
for(int i = 1; i <= n; i++) {
if(vis[i]) continue;
int tmp = i, tot = 0;
while(vis[tmp] == 0) { //沿着置换遍历
vis[tmp] = 1;
tmp = p[tmp];
tot++;
}
ans[++cnt] = tot; // 第cnt个环的大小
}
return 0;
}
好像在java里,new一个BIgInteger比较慢,但是直接调用one,ten的大整数快
import java.math.BigInteger;
import java.util.*;
public class Main {
static int p[] = new int[100010];
static int num[] = new int[100010];
static boolean vis[] = new boolean[100010];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(), cnt = 0;
for(int i = 1; i <= n; i++) {
p[i] = in.nextInt();
}
BigInteger mod = BigInteger.ONE;
for(int i = 1; i <= n; i++) {
mod = mod.multiply(BigInteger.TEN);
if(vis[i]) continue;
int tmp = i, tot = 0;
while(!vis[tmp]) {
vis[tmp] = true;
tmp = p[tmp];
tot++;
}
num[++cnt] = tot;
}
BigInteger ans = new BigInteger(String.valueOf(num[1]));
for(int i = 1; i <= cnt; i++) {
BigInteger g = ans.gcd(new BigInteger(String.valueOf(num[i])));
ans = ans.multiply(new BigInteger(String.valueOf(num[i])));
ans = ans.divide(g);
}
System.out.println(ans.mod(mod));
in.close();
}
}
F DPS
简单模拟一下就可以了
#include <iostream>
#include <cstdio>
#include <cmath>
#define ll long long
using namespace std;
ll a[105];
void print(int n, int f){
cout << "+";
for(int i = 1; i <= n; i++)
cout << '-';
cout << "+" << endl;
}
void pr22(int n, int f, int x){
cout << "|";
if(f == 1) n = n - 1;
for(int i = 1; i <= n; i++)
cout << " ";
if(f == 1) cout << "*";
cout << "|";
cout << x << endl;
}
int main(){
int n;
cin >> n;
ll maxx = 0;
for(int i = 1; i <= n; i++) {
cin >> a[i];
maxx = max(maxx, a[i]);
}
for(int i = 1; i <= n; i++) {
ll x = ceil(a[i] * 50.0 / maxx);
print(x, a[i] == maxx);
pr22(x, a[i] == maxx, a[i]);
print(x, a[i] == maxx);
}
return 0;
}
I Hard Math Problem
答案是2.0/3.0,待补题