[hihocoder][Offer收割]编程练习赛48

时间:2022-02-28 12:07:29

折线中点

[hihocoder][Offer收割]编程练习赛48[hihocoder][Offer收割]编程练习赛48
#pragma comment(linker, "/STACK:102400000,102400000")
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<vector>
#include
<algorithm>
#include
<iostream>
#include
<map>
#include
<queue>
#include
<stack>
#include
<string>
#include
<functional>
#include
<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef
long long lint;
typedef vector
<int> VI;
typedef pair
<int, int> PII;
typedef queue
<int> QI;


void makedata() {
freopen(
"input.txt", "w", stdout);
fclose(stdout);
}

double x[200], y[200];

int main() {
#ifndef ONLINE_JUDGE
freopen(
"input.txt", "r", stdin);
#endif
//makedata();
//std::ios::sync_with_stdio(0), cin.tie(0);
int n;
scanf(
"%d", &n);
for (int i = 0; i < n; i++) scanf("%lf%lf", &x[i], &y[i]);
double l = 0;
for (int i = 1; i < n; i++) l += sqrt((x[i] - x[i - 1]) * (x[i] - x[i - 1]) + (y[i] - y[i - 1]) * (y[i] - y[i - 1]));
l
/= 2.0;
for (int i = 1; i < n; i++) {
double tmp = sqrt((x[i] - x[i - 1]) * (x[i] - x[i - 1]) + (y[i] - y[i - 1]) * (y[i] - y[i - 1]));
if (l > tmp) l -= tmp;
else {
printf(
"%.1lf %.1lf\n", x[i - 1] + (l / tmp) * (x[i] - x[i - 1]), y[i - 1] + (l / tmp) * (y[i] - y[i - 1]));
break;
}
}
return 0;
}
View Code

 

最小先序遍历

[hihocoder][Offer收割]编程练习赛48[hihocoder][Offer收割]编程练习赛48
#pragma comment(linker, "/STACK:102400000,102400000")
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<vector>
#include
<algorithm>
#include
<iostream>
#include
<map>
#include
<queue>
#include
<stack>
#include
<string>
#include
<functional>
#include
<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef
long long lint;
typedef vector
<int> VI;
typedef pair
<int, int> PII;
typedef queue
<int> QI;


void makedata() {
freopen(
"input.txt", "w", stdout);
fclose(stdout);
}

int a[200];
void solve(int l, int r) {
if (l > r) return;
int x = l;
for (int i = l; i <= r; i++) {
if (a[i] < a[x]) x = i;
}
cout
<< a[x] << endl;
solve(l, x
- 1);
solve(x
+ 1, r);
}

int main() {
#ifndef ONLINE_JUDGE
freopen(
"input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(0), cin.tie(0);
int n;
cin
>> n;
for (int i = 1; i <= n; i++) cin >> a[i];
solve(
1, n);
return 0;
}
View Code

 

假期计划

[hihocoder][Offer收割]编程练习赛48[hihocoder][Offer收割]编程练习赛48
#pragma comment(linker, "/STACK:102400000,102400000")
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<vector>
#include
<algorithm>
#include
<iostream>
#include
<map>
#include
<queue>
#include
<stack>
#include
<string>
#include
<functional>
#include
<math.h>
//#include<bits/stdc++.h>
using namespace std;
typedef
long long lint;
typedef vector
<int> VI;
typedef pair
<int, int> PII;
typedef queue
<int> QI;


void makedata() {
freopen(
"input.txt", "w", stdout);
fclose(stdout);
}

class AandC {
public:
long long *fac, *inv, *f;
long long mod;
AandC(
long long m, int n) {
mod
= m;
fac
=(long long *)malloc((n) * sizeof(long long));
inv
=(long long *)malloc((n) * sizeof(long long));
f
=(long long *)malloc((n) * sizeof(long long));
fac[
0] = fac[1] = inv[0] = inv[1] = f[0] = f[1] = 1;
for (int i = 2; i < n; i++) {
fac[i]
= fac[i - 1] * i % mod;
f[i]
= (mod - mod / i) * f[mod % i] % mod;
inv[i]
= inv[i - 1] * f[i] % mod;
}
}
//choose b from a
long long A(int a, int b) {
return fac[a] * inv[a - b] % mod;
}
long long C(int a, int b) {
return fac[a] * inv[b] % mod * inv[a - b] % mod;
}
};
const lint mod = 1000000009;
AandC ac(mod,
110000);

int main() {
#ifndef ONLINE_JUDGE
freopen(
"input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(0), cin.tie(0);
int n, a, b;
cin
>> n >> a >> b;
lint ans
= 0;
for (int i = 1; i < n; i++) {
if (i > b || n - i > a || n - i < 2) continue;
ans
+= (n - i - 1) * ac.C(b - 1, i - 1) % mod * ac.C(a - 1, n - i - 1) % mod * ac.A(a, a) % mod * ac.A(b, b) % mod;
ans
%= mod;
}
cout
<< ans << endl;
return 0;
}
View Code

 

矩阵深度