complete 1929.cpp 17425.cpp 32870.cpp 11868.rs
This commit is contained in:
95
storage/zeta/cpp/completed/17425.cpp
Normal file
95
storage/zeta/cpp/completed/17425.cpp
Normal file
@@ -0,0 +1,95 @@
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
#define let auto
|
||||
#define fn auto
|
||||
#define usize size_t
|
||||
using namespace std;
|
||||
|
||||
fn fastio() {
|
||||
ios::sync_with_stdio(false);
|
||||
cin.tie(nullptr);
|
||||
}
|
||||
|
||||
const let N_MAX = 1'000'000;
|
||||
|
||||
let Primes = vector<usize>();
|
||||
|
||||
fn generate_primes(usize n) {
|
||||
Primes.clear();
|
||||
Primes.push_back(2);
|
||||
for (usize i = 3; i <= n; i += 2) {
|
||||
for (let p: Primes) {
|
||||
if (i % p == 0) {
|
||||
break;
|
||||
} else if (p * p > i) {
|
||||
Primes.push_back(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn prime_factors(usize n) -> vector<pair<usize, usize>> {
|
||||
let factors = vector<pair<usize, usize>>();
|
||||
for (let p: Primes) {
|
||||
if (n == 1) {
|
||||
break;
|
||||
}
|
||||
if (p * p > n) {
|
||||
factors.push_back(pair(n, 1));
|
||||
break;
|
||||
}
|
||||
let cnt = 0;
|
||||
while (n % p == 0) {
|
||||
n /= p;
|
||||
cnt += 1;
|
||||
}
|
||||
if (cnt > 0) {
|
||||
factors.push_back(pair(p, cnt));
|
||||
}
|
||||
}
|
||||
return factors;
|
||||
}
|
||||
|
||||
fn divisor_sum(usize n) -> usize {
|
||||
static usize div_sum[N_MAX + 1];
|
||||
if (div_sum[n] != 0) {
|
||||
return div_sum[n];
|
||||
}
|
||||
let s = 1;
|
||||
|
||||
let fs = prime_factors(n);
|
||||
for (let f: fs) {
|
||||
s *= ((usize) pow(f.first, f.second + 1) - 1) / (f.first - 1);
|
||||
}
|
||||
|
||||
div_sum[n] = s;
|
||||
return s;
|
||||
}
|
||||
|
||||
fn cumulative_divisor_sum(usize n) -> usize {
|
||||
static usize cum_div_sum[N_MAX + 1];
|
||||
|
||||
if (cum_div_sum[n] != 0) {
|
||||
return cum_div_sum[n];
|
||||
}
|
||||
|
||||
for (usize i = 1; i <= N_MAX; i++) {
|
||||
cum_div_sum[i] = divisor_sum(i) + cum_div_sum[i - 1];
|
||||
}
|
||||
return cum_div_sum[n];
|
||||
}
|
||||
|
||||
fn main() -> int {
|
||||
fastio();
|
||||
generate_primes(N_MAX);
|
||||
usize t;
|
||||
cin >> t;
|
||||
for (usize i = 0; i < t; i++) {
|
||||
usize n;
|
||||
cin >> n;
|
||||
cout << cumulative_divisor_sum(n) << "\n";
|
||||
}
|
||||
}
|
||||
40
storage/zeta/cpp/completed/1929.cpp
Normal file
40
storage/zeta/cpp/completed/1929.cpp
Normal file
@@ -0,0 +1,40 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#define let auto
|
||||
#define fn auto
|
||||
#define usize size_t
|
||||
using namespace std;
|
||||
|
||||
fn fastio() {
|
||||
ios::sync_with_stdio(false);
|
||||
cin.tie(nullptr);
|
||||
}
|
||||
|
||||
fn get_primes(usize n) -> vector<usize> {
|
||||
let primes = vector<usize>();
|
||||
primes.push_back(2);
|
||||
for (usize i = 3; i <= n; i += 2) {
|
||||
for (let p: primes) {
|
||||
if (i % p == 0) {
|
||||
break;
|
||||
} else if (p * p > i) {
|
||||
primes.push_back(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return primes;
|
||||
}
|
||||
|
||||
fn main() -> int {
|
||||
fastio();
|
||||
usize m, n;
|
||||
cin >> m >> n;
|
||||
|
||||
let primes = get_primes(n);
|
||||
let s = lower_bound(primes.begin(), primes.end(), m);
|
||||
while (s < primes.end() && *s <= n) {
|
||||
cout << *s << "\n";
|
||||
s += 1;
|
||||
}
|
||||
}
|
||||
83
storage/zeta/cpp/completed/32870.cpp
Normal file
83
storage/zeta/cpp/completed/32870.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include <iostream>
|
||||
#include <utility>
|
||||
|
||||
#define let auto
|
||||
#define fn auto
|
||||
#define usize size_t
|
||||
using namespace std;
|
||||
|
||||
const usize MAX_N = 300'000;
|
||||
|
||||
fn fastio() {
|
||||
ios::sync_with_stdio(false);
|
||||
cin.tie(nullptr);
|
||||
}
|
||||
|
||||
fn main() -> int {
|
||||
fastio();
|
||||
let exists = new bool[MAX_N + 1]{false};
|
||||
let accum_minima = new usize[MAX_N + 2];
|
||||
let accum_maxima = new usize[MAX_N + 2];
|
||||
fill_n(accum_minima, MAX_N + 2, __UINT64_MAX__);
|
||||
usize n, q;
|
||||
cin >> n >> q;
|
||||
for (usize i = 0; i < n; i++) {
|
||||
usize tmp;
|
||||
cin >> tmp;
|
||||
exists[tmp] = true;
|
||||
}
|
||||
|
||||
for (usize i = 1; i < MAX_N + 2; i++) {// maximum elem that is less than i
|
||||
accum_maxima[i] = (exists[i - 1] ? i - 1 : accum_maxima[i - 1]);
|
||||
}
|
||||
|
||||
for (int64_t i = MAX_N; i >= 0; --i) {// minimum elem that is greater or equal than i
|
||||
accum_minima[i] = (exists[i] ? i : accum_minima[i + 1]);
|
||||
}
|
||||
|
||||
let vis = new bool[MAX_N + 1];
|
||||
let lo_query = new usize[MAX_N + 1];
|
||||
let hi_query = new usize[MAX_N + 1];
|
||||
|
||||
for (usize ic = 0; ic < q; ic++) {
|
||||
usize m;
|
||||
cin >> m;
|
||||
|
||||
if (m == 1) {
|
||||
cout << "0 0\n";
|
||||
continue;
|
||||
} else if (vis[m]) {
|
||||
cout << lo_query[m] << " " << hi_query[m] << "\n";
|
||||
continue;
|
||||
}
|
||||
vis[m] = true;
|
||||
usize minima = m - 1;
|
||||
usize maxima = 0;
|
||||
usize i;
|
||||
for (i = 0; i <= MAX_N; i += m) {
|
||||
let key = i;
|
||||
let t_min = m - 1;
|
||||
if (accum_minima[key] != __UINT64_MAX__) {
|
||||
t_min = accum_minima[key] % m;
|
||||
}
|
||||
let t_max = accum_maxima[key] % m;
|
||||
minima = min(minima, t_min);
|
||||
maxima = max(maxima, t_max);
|
||||
}
|
||||
if (i > MAX_N) {
|
||||
maxima = max(maxima, accum_maxima[MAX_N + 1] % m);
|
||||
}
|
||||
lo_query[m] = minima;
|
||||
hi_query[m] = maxima;
|
||||
cout << minima << " " << maxima << "\n";
|
||||
}
|
||||
|
||||
// free
|
||||
delete[] exists;
|
||||
delete[] accum_minima;
|
||||
delete[] accum_maxima;
|
||||
|
||||
delete[] vis;
|
||||
delete[] lo_query;
|
||||
delete[] hi_query;
|
||||
}
|
||||
19
storage/zeta/rs/completed/11868.rs
Normal file
19
storage/zeta/rs/completed/11868.rs
Normal file
@@ -0,0 +1,19 @@
|
||||
use std::io::{read_to_string, stdin};
|
||||
|
||||
fn main() {
|
||||
let temp = read_to_string(stdin()).unwrap();
|
||||
let mut iter = temp
|
||||
.split_ascii_whitespace()
|
||||
.map(|x| x.parse::<usize>().unwrap());
|
||||
|
||||
let n = iter.next().unwrap();
|
||||
let p = (0..n).map(|_| iter.next().unwrap());
|
||||
|
||||
let flg = p.fold(0, |acc, x| acc ^ x);
|
||||
|
||||
if flg == 0 {
|
||||
println!("cubelover");
|
||||
} else {
|
||||
println!("koosaga");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user