C The Number Of Good Substrings

我原来的基本思路也是这样,但是写的不够好

注意算前缀和的时候,字符串起始最好从1开始。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<queue>
  6. #include<cmath>
  7. #include<map>
  8. #include<stack>
  9. #include<set>
  10. #include<bitset>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int, int> pii;
  15. #define pb(x) push_back(x)
  16. #define cls(x, val) memset(x, val, sizeof(x))
  17. #define fi first
  18. #define se second
  19. #define mp(x, y) make_pair(x, y)
  20. #define inc(i, l, r) for(int i=l; i<=r; i++)
  21. const int inf = 0x3f3f3f3f;
  22. const int maxn = 2e5+10;
  23. string s;
  24. int lst[maxn];
  25. int main(){
  26. ios::sync_with_stdio(false);
  27. int _;
  28. cin>>_;
  29. while(_--){
  30. cin>>s;
  31. int pos = 0;
  32. int len = s.length();
  33. s = '#'+s;
  34. for(int i=1; i<=len; i++){
  35. if(s[i] == '1'){
  36. lst[i] = pos;
  37. pos = i;
  38. }
  39. }
  40. int ans = 0;
  41. for(int i=1; i<=len; i++){
  42. int num = 0;
  43. if(s[i] == '1')
  44. //最多移动18次
  45. for(int j=i; j<=len; j++){
  46. num = num*2+s[j]-'0';
  47. if(num>j-lst[i]) break;
  48. //cout<<i<<" "<<lst[i]+1<<" "<<j<<endl;
  49. ans ++;
  50. }
  51. }
  52. }
  53. cout<<ans<<endl;
  54. }
  55. return 0;
  56. }

D 有向图的环问题 Coloring Edges

给有向图的每一条边染色,使得不存在一个环,使得所有的边的颜色相同。

问最少的颜色数。

答案最大为2,然后判断是否存在有向环就可以了。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<queue>
  6. #include<cmath>
  7. #include<map>
  8. #include<stack>
  9. #include<set>
  10. #include<bitset>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int, int> pii;
  15. #define pb(x) push_back(x)
  16. #define cls(x, val) memset(x, val, sizeof(x))
  17. #define fi first
  18. #define se second
  19. #define mp(x, y) make_pair(x, y)
  20. #define inc(i, l, r) for(int i=l; i<=r; i++)
  21. const int inf = 0x3f3f3f3f;
  22. const int maxn = 5000+10;
  23. struct Edge{
  24. int v, id;
  25. };
  26. vector<Edge> G[maxn];
  27. int n, m;
  28. int res = 1;
  29. int col[maxn];
  30. int vis[maxn];
  31. void dfs(int u){
  32. vis[u] = 1;
  33. for(int i=0; i<G[u].size(); i++){
  34. int v = G[u][i].v;
  35. int id = G[u][i].id;
  36. if(vis[v] == 0) dfs(v);
  37. else if(vis[v] == 1) {
  38. res=2;
  39. col[id]=2;
  40. }
  41. }
  42. vis[u] = 2;
  43. }
  44. int main(){
  45. ios::sync_with_stdio(false);
  46. cin>>n>>m;
  47. int u, v;
  48. for(int i=1; i<=m; i++){
  49. cin>>u>>v;
  50. G[u].push_back(Edge{v, i});
  51. col[i] = 1;
  52. }
  53. for(int i=1; i<=n; i++){
  54. if(!vis[i]) dfs(i);
  55. }
  56. cout<<res<<endl;
  57. for(int i=1; i<m; i++) cout<<col[i]<<" ";
  58. cout<<col[m]<<endl;
  59. return 0;
  60. }

E 线段树 Sum Queries?

维护每一个数的每一位

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<queue>
  6. #include<cmath>
  7. #include<map>
  8. #include<stack>
  9. #include<set>
  10. #include<bitset>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int, int> pii;
  15. #define pb(x) push_back(x)
  16. #define cls(x, val) memset(x, val, sizeof(x))
  17. #define fi first
  18. #define se second
  19. #define mp(x, y) make_pair(x, y)
  20. #define inc(i, l, r) for(int i=l; i<=r; i++)
  21. #define lc (rt<<1)
  22. #define rc (rt<<1|1)
  23. const int inf = 0x3f3f3f3f;
  24. const int maxn = 2e5+10;
  25. int n, m, k;
  26. struct node{
  27. int val[9][2];
  28. void init(){memset(val,0x3f,sizeof(val));}
  29. void get(int x){
  30. init();
  31. int t=x;
  32. for(int i=0;i<9;i++){
  33. //若某一位有两个不为0,则一定unbalance.
  34. if(t%10) val[i][0]=x;
  35. t/=10;
  36. }
  37. }
  38. void print(){
  39. for(int i=0;i<9;i++){
  40. printf("%d: %d %d\n",i,val[i][0],val[i][1]);
  41. }
  42. printf("\n");
  43. }
  44. };
  45. //只要有两个数,某一位上面的模数不为0,则一定是unblanced.
  46. void merge(node &b, node& c){
  47. for(int i=0;i<9;i++){
  48. for(int j=0;j<2;j++){
  49. int t=b.val[i][j];
  50. for(int k=0;k<2;k++){
  51. if(t < c.val[i][k]) swap(t,c.val[i][k]);
  52. }
  53. }
  54. }
  55. }
  56. int a[maxn];
  57. node tree[4*maxn];
  58. void pushup(int rt, int l, int r){
  59. if(l == r){
  60. tree[rt].get(a[l]);
  61. return ;
  62. }
  63. else{
  64. memcpy(tree[rt].val,tree[lc].val,sizeof(tree[lc].val));
  65. merge(tree[rc],tree[rt]);
  66. }
  67. }
  68. void build(int rt, int l, int r){
  69. if(l < r){
  70. int M = l + (r - l)/2;
  71. build(lc,l,M); build(rc,M+1,r);
  72. }
  73. pushup(rt, l, r);
  74. }
  75. void update(int rt ,int l, int r, int pos){
  76. if(l < r){
  77. int M = l + (r - l)/2;
  78. if(pos<=M) update(lc,l,M,pos);
  79. else update(rc,M+1,r,pos);
  80. }
  81. pushup(rt,l,r);
  82. }
  83. node e; int ql, qr;
  84. void query(int rt, int l, int r){
  85. if(ql <= l && qr >= r){
  86. //cout<<233<<endl;
  87. //tree[rt].print();
  88. merge(tree[rt],e);
  89. return;
  90. }
  91. else{
  92. int M = l + (r - l)/2;
  93. if(ql<=M) query(lc,l,M);
  94. if(qr>=M+1) query(rc,M+1,r);
  95. }
  96. }
  97. int main(){
  98. while(~scanf("%d%d", &n, &m)){
  99. for(int i=1;i<=n;i++) scanf("%d",&a[i]);
  100. build(1,1,n);
  101. while(m--){
  102. int op; scanf("%d",&op);
  103. if(op==1){
  104. int pos; scanf("%d",&pos);
  105. scanf("%d",&a[pos]);
  106. update(1,1,n,pos);
  107. }
  108. else{
  109. scanf("%d %d",&ql,&qr);
  110. e.init(); query(1,1,n);
  111. //e.print();
  112. int ans = -1;
  113. for(int i=0;i<9;i++){
  114. if(e.val[i][1] == inf) continue;
  115. int t = e.val[i][0] + e.val[i][1];
  116. if(ans == -1 || ans > t) ans = t;
  117. }
  118. printf("%d\n",ans);
  119. }
  120. }
  121. }
  122. return 0;
  123. }

随机推荐

  1. System.getProperty()和getenv()

    System.getproperty(String name) 获取系统属性 System.getProperties() 获取所有系统属性 System.getenv(String name) 获取 ...

  2. Winform实现调用asp.net数据接口实例

    本文实例讲述了Winform实现调用asp.net数据接口的方法,分享给大家供大家参考.具体实现方法如下: 一.问题: 最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写 ...

  3. CSS基础教程:群组化选择器

    常常我们的CSS 样式中会有好几个地方需要使用到相同的设定时,一个一个分开写会是一件满累人的工作,重覆性太高且显得冗长,更不好管理....在CSS 语法的基本设定中,就可以把这几个相同设定的选择器合并 ...

  4. NOIP模拟 7.03

    Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...

  5. Leetcode706.Design HashMap设计哈希映射

    不使用任何内建的哈希表库设计一个哈希映射 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. get(key ...

  6. 【水滴石穿】LoginScreen_Firabase_ReactNativeApp_Redux

    先看效果 分析代码我们会发现,它使用了firebase 关于登陆部分应该是实时数据库,应该是他们后端校验的 //app.js //这里使用了实时数据库 import React, { Componen ...

  7. 51nod1040 矩阵相乘结果的判断

    给出三个N*N的矩阵A, B, C,问A * B是否等于C?Input第1行,1个数N.(0 <= N <= 500)第2 - N + 1行:每行N个数,对应矩阵A的元素.(0 <= ...

  8. Hdu 4497

    题目链接 已知 gcd(x, y, z) = G, lcm(x, y, z) = L, 求有多少种组合(x, y, z)可以满足条件.G, L都在32位int范围内. 思路: 素数分解 + 容斥 L ...

  9. python 模块的导入

  10. 使用virtualenv使得Python2和Python3并存

    1:下载python3源码并安装 wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz .tgz cd Python-.tgz . ...