[关闭]
@baobaobear 2020-04-26T13:36:34.000000Z 字数 9010 阅读 206

Contest 25

contest


A 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for(int i=a;i<=n;i++)
  4. #define per(i,a,n) for(int i=n;i>=a;i--)
  5. #define pb push_back
  6. #define SZ(x) ((int)(x).size())
  7. typedef long long ll;
  8. typedef pair<int,int> pii;
  9. typedef double db;
  10. int a,b,h;
  11. int main(){
  12. cin>>h>>a>>b;
  13. int ans=0;
  14. if(a>=h){
  15. puts("YES 1");
  16. return 0;
  17. }
  18. if(a<=b){
  19. puts("NO");
  20. return 0;
  21. }
  22. while(1){
  23. h-=a;
  24. ans++;
  25. if(h<=0) break;
  26. h+=b;
  27. }
  28. printf("YES %d\n",ans);
  29. return 0;
  30. }

B 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for(int i=a;i<=n;i++)
  4. #define per(i,a,n) for(int i=n;i>=a;i--)
  5. #define pb push_back
  6. #define SZ(x) ((int)(x).size())
  7. typedef long long ll;
  8. typedef pair<int,int> pii;
  9. typedef double db;
  10. int n,x,y;
  11. int a[2000010];
  12. int main(){
  13. cin>>n>>x>>y;
  14. rep(i,1,n) scanf("%d",a+i);
  15. if(x>y){
  16. printf("%d\n",n);
  17. return 0;
  18. }
  19. int ans=0;
  20. rep(i,1,n){
  21. if(a[i]<=x) ans++;
  22. }
  23. ans=(ans+1)/2;
  24. printf("%d\n",ans);
  25. return 0;
  26. }

C lnkkerst

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. int main() {
  6. int t;
  7. cin >> t;
  8. while(t--) {
  9. string s;
  10. cin >> s;
  11. if(is_sorted(s.begin(), s.end(), less<char>())) {
  12. cout << "0 0\n";
  13. continue;
  14. }
  15. int tmn = s.back(), pos = s.length() - 1;
  16. for(int i = (int)s.length() - 1; i >= 0; --i) {
  17. if(s[i] > tmn) pos = i;
  18. tmn = min(tmn, (int)s[i]);
  19. }
  20. // cout << pos << endl;
  21. string smin = s;
  22. int ansx = 0, ansy = 0;
  23. for(int i = pos + 1; i < (int)s.length(); ++i) {
  24. auto t = s;
  25. reverse(t.begin() + pos, t.begin() + i + 1);
  26. if(smin > t) {
  27. smin = t;
  28. ansx = pos;
  29. ansy = i;
  30. }
  31. }
  32. cout << ansx << ' ' << ansy << endl;
  33. }
  34. return 0;
  35. }

D 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for(int i=a;i<=n;i++)
  4. #define per(i,a,n) for(int i=n;i>=a;i--)
  5. #define pb push_back
  6. #define SZ(x) ((int)(x).size())
  7. typedef long long ll;
  8. typedef pair<int,int> pii;
  9. typedef double db;
  10. vector<int> g[1010];
  11. int n,u,v,siz[1010];
  12. int dfs(int now,int fa){
  13. int cnt=0;
  14. for(auto to:g[now]){
  15. if(to==fa) continue;
  16. cnt+=dfs(to,now);
  17. }
  18. return siz[now]=cnt+1;
  19. }
  20. int main(){
  21. cin>>n;
  22. rep(i,1,n-1){
  23. scanf("%d%d",&u,&v);
  24. g[u].pb(v);g[v].pb(u);
  25. }
  26. int ans=0;
  27. dfs(1,1);
  28. rep(i,1,n) ans+=siz[i];
  29. cout<<ans<<endl;
  30. return 0;
  31. }

E 1292224662

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i,a,n) for(int i=a;i<=n;i++)
  4. #define per(i,a,n) for(int i=n;i>=a;i--)
  5. #define pb push_back
  6. #define SZ(x) ((int)(x).size())
  7. typedef long long ll;
  8. typedef pair<int,int> pii;
  9. typedef double db;
  10. int n,a[500010],vis[500010];
  11. int main(){
  12. scanf("%d",&n);
  13. rep(i,1,n) scanf("%d",a+i);
  14. // srand(time(0));
  15. // n=500000;
  16. // rep(i,1,n) a[i]=i%2;
  17. rep(i,2,n-1){
  18. if(a[i-1]!=a[i]&&a[i+1]!=a[i]){
  19. vis[i]=1;
  20. }
  21. }
  22. int to,ans=0;
  23. rep(i,1,n){
  24. if(vis[i]){
  25. to=i;
  26. while(vis[to]&&to<=n) to++;
  27. to--;
  28. int len=to-i+1;
  29. if(len%2){
  30. ans=max(ans,(len+1)/2);
  31. assert(a[i-1]==a[to+1]);
  32. rep(o,i,to) a[o]=a[i-1];
  33. }
  34. else{
  35. ans=max(ans,len/2);
  36. // assert(a[i-1]!=a[to+1]);
  37. rep(o,i,i+len/2-1) a[o]=a[i-1];
  38. rep(o,i+len/2,to) a[o]=a[to+1];
  39. }
  40. i=to;
  41. }
  42. }
  43. printf("%d\n",ans);
  44. rep(i,1,n){
  45. putchar(a[i]+'0');
  46. if(i!=n) putchar(' ');
  47. }putchar('\n');
  48. return 0;
  49. }

F tiandaochouqin

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll maxn=1e5+1;
  5. ll ans[maxn],a[maxn];
  6. bool check(ll x)
  7. {
  8. ll t=sqrt(x);
  9. return t*t!=x;
  10. }
  11. int main()
  12. {
  13. int n;
  14. scanf("%d",&n);
  15. for(int i=1;i<=n/2;++i) scanf("%lld",&a[i]);
  16. ll cnt=0;
  17. for(int i=1;i<=n/2;++i)
  18. {
  19. cnt++;
  20. while(check(cnt*cnt+a[i])&&cnt<maxn) cnt++;
  21. if(cnt>=maxn){
  22. puts("No");return 0;
  23. }
  24. ans[2*i-1]=cnt*cnt;
  25. ans[2*i]=cnt*cnt+a[i];
  26. cnt=sqrt(ans[2*i]);
  27. }
  28. puts("Yes");
  29. for(int i=1;i<=n;++i)
  30. printf("%lld ",(i%2==0)?a[i/2]:ans[i]-ans[i-1]);
  31. }

G yingyingying777

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. namespace FAST_IO
  5. {
  6. static int sc_ret = 0;
  7. struct pt_nl {};
  8. struct sc
  9. {
  10. sc& operator>>(char& v) { sc_ret = scanf(" %c", &v); return *this; }
  11. sc& operator>>(int& v) { /*sc_ret = read(v);*/ sc_ret = scanf("%d", &v); return *this; }
  12. sc& operator>>(unsigned& v) { sc_ret = scanf("%u", &v); return *this; }
  13. sc& operator>>(double& v) { sc_ret = scanf("%lf", &v); return *this; }
  14. sc& operator>>(char* v) { sc_ret = scanf("%s", v); return *this; }
  15. sc& operator>>(string& v) { sc_ret = (bool)(cin >> v); return *this; }
  16. sc& operator>>(ll& v) { sc_ret = read(v); return *this; }
  17. sc& ch(char& v) { v = sc_ret = getchar(); return *this; }
  18. sc& gets(char* v) { sc_ret = fgets(v, INT_MAX, stdin) != 0; v[strlen(v) - 1] = 0; return *this; }
  19. operator bool() const { return sc_ret > 0; }
  20. template <typename T>
  21. int read(T& v)
  22. {
  23. T x = 0, k = 1;
  24. int c = getchar();
  25. while (c < '0' || c > '9')
  26. {
  27. if (c == '-') k = -1;
  28. c = getchar();
  29. }
  30. while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c - 48), c = getchar();
  31. v = x * k;
  32. return c;
  33. }
  34. }SC;
  35. struct pr
  36. {
  37. pr& ln() { putchar('\n'); return *this; }
  38. pr& operator<<(const pt_nl& nl) { putchar('\n'); return *this; }
  39. pr& operator<<(char v) { putchar(v); return *this; }
  40. pr& operator<<(int v) { write(v); return *this; }
  41. pr& operator<<(double v) { printf("%.2f", v); return *this; }
  42. pr& operator()(const char* fmt, double v) { printf(fmt, v); return *this; }
  43. pr& operator<<(const char* v) { printf("%s", v); return *this; }
  44. pr& operator<<(string v) { printf("%s", v.c_str()); return *this; }
  45. pr& operator<<(ll v) { write(v); return *this; }
  46. template <typename T>
  47. void write(T v)
  48. {
  49. int cnt = 0; char c[23];
  50. if (v == 0)
  51. {
  52. putchar('0');
  53. return;
  54. }
  55. if (v < 0) putchar('-'), v = -v;
  56. while (v) c[++cnt] = (v % 10) + 48, v /= 10;
  57. while (cnt > 0) putchar(c[cnt--]);
  58. }
  59. template <typename T>
  60. void ln(T* arr, int size)
  61. {
  62. if (size > 0)
  63. {
  64. (*this) << arr[0];
  65. for (int i = 1; i < size; ++i)
  66. {
  67. putchar(' ');
  68. (*this) << arr[i];
  69. }
  70. putchar('\n');
  71. }
  72. }
  73. template <typename T>
  74. void muln(T* arr, int size)
  75. {
  76. for (int i = 0; i < size; ++i)
  77. {
  78. (*this) << arr[i];
  79. putchar('\n');
  80. }
  81. }
  82. }PR;
  83. #define cin SC
  84. #define cout PR
  85. #define endl pt_nl()
  86. }
  87. using namespace FAST_IO;
  88. ll mulit(ll a,ll b,ll m){
  89. ll ans=0;
  90. while(b){
  91. if(b&1) ans=(ans+a)%m;
  92. a=(a<<1)%m;
  93. b>>=1;
  94. }
  95. return ans;
  96. }
  97. ll quick_mod(ll a,ll b,ll m){
  98. ll ans=1;
  99. while(b){
  100. if(b&1){
  101. ans=mulit(ans,a,m);
  102. }
  103. a=mulit(a,a,m);
  104. b>>=1;
  105. }
  106. return ans;
  107. }
  108. ll comp(ll a,ll b,ll m){
  109. if(a<b) return 0;
  110. if(a==b) return 1;
  111. if(b>a-b) b=a-b;
  112. ll ans=1,ca=1,cb=1;
  113. for(int i=0;i<b;i++){
  114. ca=ca*(a-i)%m;
  115. cb=cb*(b-i)%m;
  116. }
  117. ans=ca*quick_mod(cb,m-2,m)%m;
  118. return ans;
  119. }
  120. ll lucas(ll a,ll b,ll m){
  121. ll ans=1;
  122. while(a&&b){
  123. ans=(ans*comp(a%m,b%m,m))%m;
  124. a/=m;
  125. b/=m;
  126. }
  127. return ans;
  128. }
  129. const ll mod=1e9+7;
  130. ll n,m;
  131. int main()
  132. {
  133. cin>>n>>m;
  134. if(n<m)
  135. swap(n,m);
  136. cout<<lucas(n+m-3-1,m-2,mod)<<endl;
  137. return 0;
  138. }

H tiandaochouqin

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=(1<<21)+5;
  5. int T,h,g,a[maxn];
  6. vector<int>ans;
  7. int getdeep(int pos)
  8. {
  9. if(!a[pos<<1]&&!a[pos<<1|1]) return pos;
  10. return a[pos<<1]>a[pos<<1|1]?getdeep(pos<<1):getdeep(pos<<1|1);
  11. }
  12. void dfs(int x)
  13. {
  14. if(!a[x<<1]&&!a[x<<1|1]) {a[x]=0;return ;}
  15. if(a[x<<1]>a[x<<1|1]){
  16. a[x]=a[x<<1];dfs(x<<1);
  17. }
  18. else {
  19. a[x]=a[x<<1|1];dfs(x<<1|1);
  20. }
  21. }
  22. int main()
  23. {
  24. scanf("%d",&T);
  25. while(T--)
  26. {
  27. ans.clear();
  28. scanf("%d %d",&h,&g);
  29. for(int i=0;i<=(1<<(h+1));++i) a[i]=0;
  30. for(int i=1;i<(1<<h);++i) scanf("%d",&a[i]);
  31. for(int i=1;i<(1<<g);++i)
  32. while(getdeep(i)>(1<<g)-1) ans.push_back(i),dfs(i);
  33. ll sum=0;
  34. for(int i=1;i<(1<<g);++i) sum+=a[i];
  35. printf("%lld\n",sum);
  36. for(int i:ans) printf("%d ",i);
  37. puts("");
  38. }
  39. }

I

J _Wallace_

  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 1e5 + 5;
  6. const int K = 1e6 + 5;
  7. int n, q, k;
  8. int belong[N], b;
  9. int ary[N];
  10. struct Query {
  11. int l, r, t;
  12. inline bool operator < (const Query &temp) const {
  13. return belong[l] == belong[temp.l] ? r < temp.r : belong[l] < belong[temp.l];
  14. }
  15. } qry[N];
  16. int cnt[K << 1], L = 0, R = -1;
  17. long long total = 0;
  18. inline void inc(int p) {
  19. total += cnt[ary[p] ^ k];
  20. ++ cnt[ary[p]];
  21. }
  22. inline void dec(int p) {
  23. -- cnt[ary[p]];
  24. total -= cnt[ary[p] ^ k];
  25. }
  26. inline void select(int l, int r) {
  27. while(L < l) dec(L ++);
  28. while(L > l) inc(-- L);
  29. while(R < r) inc(++ R);
  30. while(R > r) dec(R --);
  31. }
  32. long long ans[N];
  33. signed main() {
  34. ios::sync_with_stdio(false);
  35. cin >> n >> q >> k;
  36. for (register int i = 1; i <= n; i ++)
  37. cin >> ary[i], ary[i] ^= ary[i - 1];
  38. for (register int i = 1; i <= q; i ++)
  39. cin >> qry[i].l >> qry[i].r, -- qry[i].l, qry[i].t = i;
  40. b = sqrt(n);
  41. for (register int i = 0; i <= n; i ++)
  42. belong[i] = i / b + 1;
  43. sort(qry + 1, qry + 1 + q);
  44. for (register int i = 1; i <= q; i ++) {
  45. select(qry[i].l, qry[i].r);
  46. ans[qry[i].t] = total;
  47. }
  48. for (register int i = 1; i <= q; i ++)
  49. cout << ans[i] << endl;
  50. return 0;
  51. }

K _Wallace_

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 1e5 + 5;
  6. const int S = N << 5;
  7. int lc[S], rc[S], sum[S], total = 0;
  8. int root[N], wei[N];
  9. int n, q;
  10. vector<int> G[N];
  11. #define mid ((l + r) >> 1)
  12. int build(int l, int r) {
  13. int rt = ++ total;
  14. if (l == r) return rt;
  15. lc[rt] = build(l, mid);
  16. rc[rt] = build(mid + 1, r);
  17. return rt;
  18. }
  19. int update(int pre, int pos, int l, int r) {
  20. int rt = ++ total;
  21. lc[rt] = lc[pre], rc[rt] = rc[pre];
  22. sum[rt] = sum[pre] + 1;
  23. if (l == r) return rt;
  24. if (pos <= mid) lc[rt] = update(lc[pre], pos, l, mid);
  25. else rc[rt] = update(rc[pre], pos, mid + 1, r);
  26. return rt;
  27. }
  28. int findKth(int a, int b, int c, int d, int k, int l, int r) {
  29. if (l == r) return l;
  30. int x = sum[lc[a]] + sum[lc[b]] - sum[lc[c]] - sum[lc[d]];
  31. if (k <= x) return findKth(lc[a], lc[b], lc[c], lc[d], k, l, mid);
  32. else return findKth(rc[a], rc[b], rc[c], rc[d], k - x, mid + 1, r);
  33. }
  34. #undef mid
  35. int fa[N], size[N];
  36. int dep[N], maxs[N];
  37. int top[N];
  38. void Dfs1(int rt, int f) {
  39. root[rt] = update(root[f], wei[rt], 1, n);
  40. size[rt] = 1, fa[rt] = f, dep[rt] = dep[f] + 1;
  41. for (vector<int>::iterator it = G[rt].begin(); it != G[rt].end(); ++ it) {
  42. if (*it == f) continue;
  43. Dfs1(*it, rt), size[rt] += size[*it];
  44. if (size[maxs[rt]] < size[*it])
  45. maxs[rt] = *it;
  46. }
  47. }
  48. void Dfs2(int rt,int tp) {
  49. top[rt] = tp;
  50. if (maxs[rt]) Dfs2(maxs[rt], tp);
  51. for (vector<int>::iterator it = G[rt].begin(); it != G[rt].end(); ++ it)
  52. if (*it != fa[rt] && *it != maxs[rt])
  53. Dfs2(*it, *it);
  54. }
  55. inline int findLCA(int u,int v) {
  56. while(top[u] != top[v])
  57. if (dep[top[u]] > dep[top[v]]) u = fa[top[u]];
  58. else v = fa[top[v]];
  59. return dep[u] < dep[v] ? u : v;
  60. }
  61. int buf[N], cnt;
  62. signed main() {
  63. ios::sync_with_stdio(false);
  64. cin >> n >> q;
  65. for (register int i = 1; i <= n; ++ i)
  66. cin >> wei[i], buf[i] = wei[i];
  67. for (register int u, v, i = 1; i < n; ++ i) {
  68. cin >> u >> v;
  69. G[u].push_back(v);
  70. G[v].push_back(u);
  71. }
  72. sort(buf + 1, buf + 1 + n), cnt = unique(buf + 1, buf + 1 + n) - buf - 1;
  73. for (register int i = 1; i <= n; i ++)
  74. wei[i] = lower_bound(buf + 1, buf + 1 + cnt, wei[i]) - buf;
  75. root[0] = build(1, n);
  76. Dfs1(1, 0), Dfs2(1, 1);
  77. while (q --) {
  78. int u, v, k, l, f;
  79. cin >> u >> v >> k;
  80. l = findLCA(u, v), f = fa[l];
  81. cout << buf[findKth(root[u], root[v], root[f], root[l], k, 1, n)] << endl;
  82. }
  83. return 0;
  84. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注