#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef long long ll;
typedef vector<ll> vll;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<bool> vb;
typedef unsigned long long ull;
#define lowbit(S) ((S) & -(S))
#define pb push_back
#define bg begin()
#define ed end()
#define sz(x) ((int)(x.size()))
template<typename T>
bool isPrime(T x){
if (x > 2 && x % 2 == 0) return false;
for (T i = 3; i * i <= x; i += 2)if (x % i == 0) return false;
return true;
}
template<typename T>
int gcd (T a, T b){
return b == 0 ? a : gcd(b, a % b);
}
template<typename T>
T quickPow(T a, T b, T mod){
ll result = 1;
while (b){
if (b & 1){
result = (1ull * result * a) % mod;
}
a = (1ull * a * a) % mod;
b >>= 1;
}
return result % mod;
}
class UnionFind{
private:
vi fa, setSize, weight;
int numSets;
public:
UnionFind(int m){
fa.assign(m, 0);for (int i = 0; i < m; ++i) fa[i] = i;
setSize.assign(m, 1);
numSets = m;
}
int findSet(int x){
if (fa[x] == x)return x;
int root = findSet(fa[x]);
return fa[x] = root;
}
int isSameset(int x, int y){return findSet(x) == findSet(y);}
void unionSet(int x, int y){
x = findSet(x), y = findSet(y);
if (x == y) return;
fa[x] = y;
setSize[y] += setSize[x];
numSets -= 1;
}
};
void AAA(){
vector<char> model = {'2', '0', '1', '9'};
ll result = 0;
for (int i = 1; i <= 2019; ++i){
string s = to_string(i);
bool ok = false;
for (auto& x : s){
for (auto y : model) if (x == y){
ok = true;
break;
}
if (ok) break;
}
if (ok) result += 1ll * i * i * i;
}
cout << result << endl; //4097482414389
}
void BBB(){
string s = "LANQIAO";
int n = sz(s), k = 1;
ll result = 0;
for (int i = n - 1; i >= 0; --i){
result += 1ll * (s[i] - 'A' + 1) * k;
k *= 26;
}
cout << result << endl; //3725573269
}
void CCC(){
ll result;
int cnt = 1;
for (ll i = 2; cnt <= 2019; ++i){
if (isPrime(i)) {cnt += 1;}
result = i;
}
cout << result << endl; //17569
}
void DDD(){
//直接数
cout << 6 << endl;
}
//尚未解决大数计算问题
void EEE(){
ll n = 1001733993063167141, p, q, d = 212353, e, c = 20190324;
/*
for (ll i = 2; i * i <= n; ++i){
if (n % i == 0 && isPrime(i) && isPrime(n / i)){
cout << i << " " << n / i << endl;//891234941 1123984201
}
}*/
p = 891234941, q = 1123984201;
int k = 1;
while ((k * 1ull * (p - 1) * (q - 1) + 1 ) % d){k += 1;} //挂在大数上了
e = (k * 1ull * (p - 1) * (q - 1) + 1 ) / d;//57230754987937
cout << 1ll * quickPow(c, e, n); //649483095833502927
}
void FFF(){
vll f(100, 1);
for (int i = 3; i <= 100; ++i) f[i] = f[i - 1] + f[i - 2];
//for (int i = 1; i < 100; ++i){cout << fixed << setprecision(8) << i << " " << (double)f[i] / f[i + 1] << endl;}
int n;
cin >> n;
if (n <= 91) cout << fixed << setprecision(8) << (double)f[n] / f[n + 1] << endl;
else cout << "0.61803399" << endl;
}
bool checkG(const vi& a, const int N, int s){
int l = 1, r = 1;
for (auto& x : a){
if (l <= x){if ((x - l) * 2 > s) return false; r = max(r, x + (s - (x - l) * 2) / 2);}
else r = max(r, x + s / 2);
l = r + 1;
}
return r >= N;
}
void GGG(){
int n, k;
cin >> n >> k;
vi a(k);
for (auto& x : a) cin >> x;
sort(a.bg, a.ed);
int l = 1, r = 2 * n;
while(l < r){
int mid = (l + r) >> 1;
if (checkG(a, n, mid)){r = mid;}
else l = mid + 1;
}
cout << l << endl;
}
void HHH(){
int n;
cin >> n;
vi a(n);
UnionFind uf(1e6 + 233);
for (auto& x : a){
cin >> x;
int parent = uf.findSet(x);
x = parent;
uf.unionSet(parent, parent + 1);
}
for (int i = 0; i < n; ++i){cout << a[i] << " \n"[i == n - 1];}
}
void III(){
//前缀和可以任意交换次序
//通过交换前缀和次数更改最大值
}
void JJJ(){
//待查看
}
int main(){
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
return 0;
}
题目待总结
E题大数计算未解决
H I问题待研究