当前位置:   article > 正文

第十届蓝桥杯省赛C++研究生组_c++编程比赛研究生

c++编程比赛研究生
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef vector<int> vi;
  4. typedef long long ll;
  5. typedef vector<ll> vll;
  6. typedef pair<int, int> ii;
  7. typedef vector<ii> vii;
  8. typedef vector<bool> vb;
  9. typedef unsigned long long ull;
  10. #define lowbit(S) ((S) & -(S))
  11. #define pb push_back
  12. #define bg begin()
  13. #define ed end()
  14. #define sz(x) ((int)(x.size()))
  15. template<typename T>
  16. bool isPrime(T x){
  17. if (x > 2 && x % 2 == 0) return false;
  18. for (T i = 3; i * i <= x; i += 2)if (x % i == 0) return false;
  19. return true;
  20. }
  21. template<typename T>
  22. int gcd (T a, T b){
  23. return b == 0 ? a : gcd(b, a % b);
  24. }
  25. template<typename T>
  26. T quickPow(T a, T b, T mod){
  27. ll result = 1;
  28. while (b){
  29. if (b & 1){
  30. result = (1ull * result * a) % mod;
  31. }
  32. a = (1ull * a * a) % mod;
  33. b >>= 1;
  34. }
  35. return result % mod;
  36. }
  37. class UnionFind{
  38. private:
  39. vi fa, setSize, weight;
  40. int numSets;
  41. public:
  42. UnionFind(int m){
  43. fa.assign(m, 0);for (int i = 0; i < m; ++i) fa[i] = i;
  44. setSize.assign(m, 1);
  45. numSets = m;
  46. }
  47. int findSet(int x){
  48. if (fa[x] == x)return x;
  49. int root = findSet(fa[x]);
  50. return fa[x] = root;
  51. }
  52. int isSameset(int x, int y){return findSet(x) == findSet(y);}
  53. void unionSet(int x, int y){
  54. x = findSet(x), y = findSet(y);
  55. if (x == y) return;
  56. fa[x] = y;
  57. setSize[y] += setSize[x];
  58. numSets -= 1;
  59. }
  60. };
  61. void AAA(){
  62. vector<char> model = {'2', '0', '1', '9'};
  63. ll result = 0;
  64. for (int i = 1; i <= 2019; ++i){
  65. string s = to_string(i);
  66. bool ok = false;
  67. for (auto& x : s){
  68. for (auto y : model) if (x == y){
  69. ok = true;
  70. break;
  71. }
  72. if (ok) break;
  73. }
  74. if (ok) result += 1ll * i * i * i;
  75. }
  76. cout << result << endl; //4097482414389
  77. }
  78. void BBB(){
  79. string s = "LANQIAO";
  80. int n = sz(s), k = 1;
  81. ll result = 0;
  82. for (int i = n - 1; i >= 0; --i){
  83. result += 1ll * (s[i] - 'A' + 1) * k;
  84. k *= 26;
  85. }
  86. cout << result << endl; //3725573269
  87. }
  88. void CCC(){
  89. ll result;
  90. int cnt = 1;
  91. for (ll i = 2; cnt <= 2019; ++i){
  92. if (isPrime(i)) {cnt += 1;}
  93. result = i;
  94. }
  95. cout << result << endl; //17569
  96. }
  97. void DDD(){
  98. //直接数
  99. cout << 6 << endl;
  100. }
  101. //尚未解决大数计算问题
  102. void EEE(){
  103. ll n = 1001733993063167141, p, q, d = 212353, e, c = 20190324;
  104. /*
  105. for (ll i = 2; i * i <= n; ++i){
  106. if (n % i == 0 && isPrime(i) && isPrime(n / i)){
  107. cout << i << " " << n / i << endl;//891234941 1123984201
  108. }
  109. }*/
  110. p = 891234941, q = 1123984201;
  111. int k = 1;
  112. while ((k * 1ull * (p - 1) * (q - 1) + 1 ) % d){k += 1;} //挂在大数上了
  113. e = (k * 1ull * (p - 1) * (q - 1) + 1 ) / d;//57230754987937
  114. cout << 1ll * quickPow(c, e, n); //649483095833502927
  115. }
  116. void FFF(){
  117. vll f(100, 1);
  118. for (int i = 3; i <= 100; ++i) f[i] = f[i - 1] + f[i - 2];
  119. //for (int i = 1; i < 100; ++i){cout << fixed << setprecision(8) << i << " " << (double)f[i] / f[i + 1] << endl;}
  120. int n;
  121. cin >> n;
  122. if (n <= 91) cout << fixed << setprecision(8) << (double)f[n] / f[n + 1] << endl;
  123. else cout << "0.61803399" << endl;
  124. }
  125. bool checkG(const vi& a, const int N, int s){
  126. int l = 1, r = 1;
  127. for (auto& x : a){
  128. if (l <= x){if ((x - l) * 2 > s) return false; r = max(r, x + (s - (x - l) * 2) / 2);}
  129. else r = max(r, x + s / 2);
  130. l = r + 1;
  131. }
  132. return r >= N;
  133. }
  134. void GGG(){
  135. int n, k;
  136. cin >> n >> k;
  137. vi a(k);
  138. for (auto& x : a) cin >> x;
  139. sort(a.bg, a.ed);
  140. int l = 1, r = 2 * n;
  141. while(l < r){
  142. int mid = (l + r) >> 1;
  143. if (checkG(a, n, mid)){r = mid;}
  144. else l = mid + 1;
  145. }
  146. cout << l << endl;
  147. }
  148. void HHH(){
  149. int n;
  150. cin >> n;
  151. vi a(n);
  152. UnionFind uf(1e6 + 233);
  153. for (auto& x : a){
  154. cin >> x;
  155. int parent = uf.findSet(x);
  156. x = parent;
  157. uf.unionSet(parent, parent + 1);
  158. }
  159. for (int i = 0; i < n; ++i){cout << a[i] << " \n"[i == n - 1];}
  160. }
  161. void III(){
  162. //前缀和可以任意交换次序
  163. //通过交换前缀和次数更改最大值
  164. }
  165. void JJJ(){
  166. //待查看
  167. }
  168. int main(){
  169. ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  170. return 0;
  171. }

题目待总结

E题大数计算未解决

H I问题待研究

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/48823
推荐阅读
相关标签
  

闽ICP备14008679号