暴力 A - Ebony and Ivory

  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class Main {
  5. public static void main(String[] args) {
  6. Scanner cin = new Scanner (new BufferedInputStream (System.in));
  7. int a = cin.nextInt ();
  8. int b = cin.nextInt ();
  9. int c = cin.nextInt ();
  10. for (int i=0; a*i<=c; ++i) {
  11. int d = c - a * i;
  12. if (d % b == 0) {
  13. System.out.println ("Yes");
  14. return ;
  15. }
  16. }
  17. System.out.println ("No");
  18. }
  19. }

数学 B - A Trivial Problem

题意:问n!的后缀0的个数为m个的n的范围.

分析:出现0的一定是2*5产生的,而2的数字有很多,所以找到最小的数字之前5的总个数为m的.二分来找.

  1. #include <bits/stdc++.h>
  2.  
  3. int number(int x) {
  4. int ret = 0;
  5. while (x) {
  6. x /= 5;
  7. ret += x;
  8. }
  9. return ret;
  10. }
  11.  
  12. int main() {
  13. int m; scanf ("%d", &m);
  14. int left = 1, right = (int) 1e9;
  15. while (left < right) {
  16. int mid = left + right >> 1;
  17. if (number (mid) < m) left = mid + 1;
  18. else right = mid;
  19. }
  20. std::vector<int> ans;
  21. for (;;) {
  22. if (number (left) == m) ans.push_back (left);
  23. else break;
  24. left++;
  25. }
  26. int sz = ans.size ();
  27. printf ("%d\n", sz);
  28. for (int i=0; i<sz; ++i) {
  29. if (i > 0) putchar (' ');
  30. printf ("%d", ans[i]);
  31. }
  32. puts ("");
  33.  
  34. return 0;
  35. }

Trie + DP C - Spy Syndrome 2

题意:有一句话被变成全小写并且删掉空格并且翻转单词,然后给出可能的单词.问原来可能的这句话.

分析:首先把单词插入到字典树上,这里为了节约内存把所有单词并在一起.结点保存了该单词在单词串的位置以便输出.然后文本串倒过来在字典树上DP搜索,最后正的输出,那么可以找到可行的一句话.

  1. #include <bits/stdc++.h>
  2.  
  3. const int N = 1e4 + 5;
  4. const int M = 1e6 + 1e5;
  5. const int NODE = M;
  6. char text[N], words[M];
  7. int ch[NODE][26], val[NODE], pos[NODE];
  8. int n, m, sz;
  9. int nex[N], wl[N];
  10.  
  11. int idx(char c) {
  12. return tolower (c) - 'a';
  13. }
  14. void trie_init() {
  15. memset (ch[0], 0, sizeof (ch[0]));
  16. sz = 1;
  17. }
  18. void trie_insert(char *str, int end, int id, int p) {
  19. int u = 0;
  20. for (int c, i=0; i<end; ++i) {
  21. c = idx (str[i]);
  22. if (!ch[u][c]) {
  23. memset (ch[sz], 0, sizeof (ch[sz]));
  24. val[sz] = 0; pos[sz] = 0;
  25. ch[u][c] = sz++;
  26. }
  27. u = ch[u][c];
  28. }
  29. val[u] = id; pos[id] = p;
  30. }
  31. void trie_query() {
  32. memset (nex, -1, sizeof (nex));
  33. memset (wl, 0, sizeof (wl));
  34. nex[n] = 0;
  35. for (int i=n; i>0; --i) {
  36. if (nex[i] == -1) continue;
  37. int u = 0;
  38. for (int c, j=i-1; j>=0; --j) {
  39. c = idx (text[j]);
  40. if (!ch[u][c]) break;
  41. u = ch[u][c];
  42. if (val[u] > 0) {
  43. wl[j] = pos[val[u]];
  44. nex[j] = i;
  45. }
  46. }
  47. }
  48. }
  49.  
  50. int main() {
  51. scanf ("%d", &n);
  52. scanf ("%s", text);
  53. scanf ("%d", &m);
  54. trie_init ();
  55. for (int L=0, i=1; i<=m; ++i) {
  56. scanf ("%s", words + L);
  57. int len = strlen (words + L);
  58. trie_insert (words + L, len, i, L);
  59. L += len + 1;
  60. }
  61. trie_query ();
  62. int now = 0;
  63. while (now < n) {
  64. if (now > 0) putchar (' ');
  65. printf ("%s", words + wl[now]);
  66. now = nex[now];
  67. }
  68. puts ("");
  69.  
  70. return 0;
  71. }

DFS + 二分 D - Fibonacci-ish

题意:在n个数找出一组数字满足fn = fn-1 + fn-2, 问最大长度.

分析:n的范围小,可以考虑n^2枚举两个起点,因为要考虑到个数的问题,这里我选择一种方便的写法:首先不考虑个数,只预处理两个数能否到下一个数字.然后考虑个数,类似DFS的vis功能,深搜时-1,回溯时+1

  1. #include <bits/stdc++.h>
  2.  
  3. const int N = 1e3 + 5;
  4. const int MOD = 1e9 + 7;
  5. int a[N], A[N];
  6. int nex[N][N];
  7. int cnt[N];
  8. int ans;
  9.  
  10. void DFS(int i, int j, int step) {
  11. if (step > ans) ans = step;
  12. int k = nex[i][j];
  13. if (k == -1) return ;
  14. else if (cnt[k] > 0) {
  15. --cnt[k];
  16. DFS (j, k, step + 1);
  17. ++cnt[k];
  18. }
  19. }
  20.  
  21. int main() {
  22. int n; scanf ("%d", &n);
  23. for (int i=0; i<n; ++i) {
  24. scanf ("%d", &a[i]); A[i] = a[i];
  25. }
  26. std::sort (A, A+n);
  27. int m = std::unique (A, A+n) - A;
  28. for (int i=0; i<n; ++i) {
  29. a[i] = std::lower_bound (A, A+m, a[i]) - A;
  30. cnt[a[i]]++;
  31. }
  32. for (int i=0; i<m; ++i) {
  33. for (int j=0; j<m; ++j) {
  34. int k = std::lower_bound (A, A+m, A[i] + A[j]) - A;
  35. if (k >= m || A[i] + A[j] != A[k]) nex[i][j] = -1;
  36. else nex[i][j] = k;
  37. }
  38. }
  39. ans = 2;
  40. for (int i=0; i<m; ++i) {
  41. --cnt[i];
  42. for (int j=0; j<m; ++j) {
  43. if (cnt[j] <= 0) continue;
  44. --cnt[j];
  45. DFS (i, j, 2);
  46. ++cnt[j];
  47. }
  48. ++cnt[i];
  49. }
  50. printf ("%d\n", ans);
  51.  
  52. return 0;
  53. }

二分查找 + RMQ + 组合数学 E - Startup Funding

题意:对于每一个li = i,找到一个ri,使得最大.从n个结果中选择k个,最小值的期望.

分析:第一个问题,考虑前缀max (vk)是递增的,考虑前缀min(ck)是递减的,两者取min那么是单峰函数,二分查找.第二个问题,首先对结果排序,假设最小值为ans[i],那么选中它当最小值的概率是C(n-i, k-1) / C (n, k).p * ans[i]求和就是期望.发现公式可以递推.

  1. #include <bits/stdc++.h>
  2.  
  3. const int N = 1e6 + 5;
  4. int mx[N][21], mn[N][21];
  5. int best[N];
  6. int n, k;
  7.  
  8. void build_max() {
  9. for (int j=1; (1<<j)<=n; ++j) {
  10. for (int i=1; i+(1<<j)-1<=n; ++i) {
  11. mx[i][j] = std::max (mx[i][j-1], mx[i+(1<<(j-1))][j-1]);
  12. }
  13. }
  14. }
  15. int query_max(int l, int r) {
  16. int k = 0; while (1<<(k+1) <= r-l+1) ++k;
  17. return std::max (mx[l][k], mx[r-(1<<k)+1][k]);
  18. }
  19.  
  20. void build_min() {
  21. for (int j=1; (1<<j)<=n; ++j) {
  22. for (int i=1; i+(1<<j)-1<=n; ++i) {
  23. mn[i][j] = std::min (mn[i][j-1], mn[i+(1<<(j-1))][j-1]);
  24. }
  25. }
  26. }
  27. int query_min(int l, int r) {
  28. int k = 0; while (1<<(k+1) <= r-l+1) ++k;
  29. return std::min (mn[l][k], mn[r-(1<<k)+1][k]);
  30. }
  31.  
  32. int p(int l, int r) {
  33. if (l > r || l < 1 || r > n) return 0;
  34. return std::min (100 * query_max (l, r), query_min (l, r));
  35. }
  36.  
  37. int main() {
  38. scanf ("%d%d", &n, &k);
  39. for (int i=1; i<=n; ++i) {
  40. scanf ("%d", &mx[i][0]);
  41. }
  42. build_max ();
  43. for (int i=1; i<=n; ++i) {
  44. scanf ("%d", &mn[i][0]);
  45. }
  46. build_min ();
  47. for (int i=1; i<=n; ++i) {
  48. int low = i, high = n;
  49. while (low + 1 < high) {
  50. int mid = low + high >> 1;
  51. int v1 = 100 * query_max (i, mid);
  52. int v2 = query_min (i, mid);
  53. if (v1 < v2) low = mid;
  54. else high = mid;
  55. }
  56. best[i-1] = std::max (p (i, low), p (i, high));
  57. }
  58. std::sort (best, best+n);
  59. double prob = 1.0 * k / n;
  60. double ans = prob * best[0];
  61. for (int i=1; i<=n-k; ++i) {
  62. prob = prob * (n - i - k + 1) / (n - i);
  63. ans += prob * best[i];
  64. }
  65. printf ("%.12f\n", ans);
  66.  
  67. return 0;
  68. }

树形DP F - The Chocolate Spree

题意:树上选择两条不相交的路径,且两条路径权值和最大.

分析:因为权值>0, 所以起点或终点一定在叶子结点上,第一次DFS,得到best[u]:u结点的子树下得到最大权值和(一条),以及down[u]:从结点u出发到叶子节点选择一条路的最大权值和.第二次DFS扫描每一个结点,从儿子中选择一个,它子树best[v1]作为一条路径,还有一条从前缀i以及后缀i+1中选择,更新最大值就是答案.

  1. #include <bits/stdc++.h>
  2.  
  3. typedef long long ll;
  4. const int N = 1e5 + 5;
  5. std::vector<int> edge[N];
  6. int a[N];
  7. ll best[N], down[N];
  8. ll ans;
  9. int n;
  10.  
  11. void DFS(int u, int fa) {
  12. std::vector<ll> downs;
  13. for (auto v: edge[u]) {
  14. if (v == fa) continue;
  15. DFS (v, u);
  16. best[u] = std::max (best[u], best[v]);
  17. downs.push_back (down[v]);
  18. }
  19. ll mx1 = 0, mx2 = 0;
  20. for (auto d: downs) {
  21. if (d > mx1) {
  22. mx2 = mx1; mx1 = d;
  23. }
  24. else if (d > mx2) {
  25. mx2 = d;
  26. }
  27. }
  28. best[u] = std::max (best[u], mx1 + mx2 + a[u]);
  29. down[u] = mx1 + a[u];
  30. ans = std::max (ans, best[u]);
  31. }
  32.  
  33. void DFS2(int u, int fa, ll up) {
  34. up += a[u];
  35. std::vector<int> children;
  36. for (auto v: edge[u]) {
  37. if (v == fa) continue;
  38. children.push_back (v);
  39. }
  40. int sz = children.size ();
  41. if (sz == 0) return ;
  42. std::vector<ll> prebest (sz + 1), sufbest (sz + 1); //前缀(1~i-1)最优的一条路径
  43. prebest[0] = 0;
  44. for (int i=0; i<sz; ++i) {
  45. prebest[i+1] = std::max (prebest[i], best[children[i]]);
  46. }
  47. sufbest[sz] = 0;
  48. for (int i=sz-1; i>=0; --i) { //后缀(i+1~sz-1)最优的一条路径
  49. sufbest[i] = std::max (sufbest[i+1], best[children[i]]);
  50. }
  51. std::vector<ll> predown (sz + 1), predown2 (sz + 1); //前缀两条到叶子节点最优的路径
  52. predown[0] = predown2[0] = 0;
  53. for (int i=0; i<sz; ++i) {
  54. predown[i+1] = predown[i];
  55. predown2[i+1] = predown2[i];
  56. ll x = down[children[i]];
  57. if (x > predown[i+1]) {
  58. predown2[i+1] = predown[i+1];
  59. predown[i+1] = x;
  60. }
  61. else if (x > predown2[i+1]) {
  62. predown2[i+1] = x;
  63. }
  64. }
  65. std::vector<ll> sufdown (sz + 1), sufdown2 (sz + 1); //后缀两条到叶子节点最优的路径
  66. sufdown[sz] = sufdown2[sz] = 0;
  67. for (int i=sz-1; i>=0; --i) {
  68. sufdown[i] = sufdown[i+1];
  69. sufdown2[i] = sufdown2[i+1];
  70. ll x = down[children[i]];
  71. if (x > sufdown[i]) {
  72. sufdown2[i] = sufdown[i];
  73. sufdown[i] = x;
  74. }
  75. else if (x > sufdown2[i]) {
  76. sufdown2[i] = x;
  77. }
  78. }
  79. for (int i=0; i<sz; ++i) {
  80. ll cur = std::max (prebest[i], sufbest[i+1]);
  81. cur = std::max (cur, up + std::max (predown[i], sufdown[i+1]));
  82. cur = std::max (cur, a[u] + predown[i] + sufdown[i+1]);
  83. cur = std::max (cur, a[u] + predown[i] + predown2[i]);
  84. cur = std::max (cur, a[u] + sufdown[i+1] + sufdown2[i+1]);
  85. cur += best[children[i]];
  86. ans = std::max (ans, cur);
  87. }
  88. for (int i=0; i<sz; ++i) {
  89. int v = children[i];
  90. ll new_up = up;
  91. new_up = std::max (new_up, a[u] + std::max (predown[i], sufdown[i+1]));
  92. DFS2 (v, u, new_up);
  93. }
  94. }
  95.  
  96. int main() {
  97. scanf ("%d", &n);
  98. for (int i=1; i<=n; ++i) scanf ("%d", a+i);
  99. for (int u, v, i=1; i<n; ++i) {
  100. scanf ("%d%d", &u, &v);
  101. edge[u].push_back (v);
  102. edge[v].push_back (u);
  103. }
  104. DFS (1, 0);
  105. DFS2 (1, 0, 0);
  106. printf ("%I64d\n", ans);
  107.  
  108. return 0;
  109. }

DFS序 + 线段树 + bitset G - Yash And Trees  

题意:两种操作; 1.v的子树的所有结点权值+x 2. 询问v子树%m后是素数的个数

分析:1操作想到线段树的成段更新,树变成线段用DFS序,每个结点有它'统治"的范围(子树). 然而后者统计用普通数组很难实现.用到了bitset这个容器,里面可以表示m位的01,本题表示一个结点子树所拥有的数值(%m),最后只要&primes就是素数个数.那么如何实现+x呢,因为每一位表示数值,往前一位表示+1,那么<<x, 还有可能移位超出去了,还要| >>(m - x).

  1. #include <bits/stdc++.h>
  2.  
  3. #define lson l, mid, o << 1
  4. #define rson mid + 1, r, o << 1 | 1
  5. const int N = 1e5 + 5;
  6. std::bitset<1000> tree[N<<2], primes, ret;
  7. std::vector<int> edge[N];
  8. int lazy[N<<2];
  9. int a[N], id[N], fl[N], fr[N];
  10. int n, m, q, tot;
  11.  
  12. void add(int &x, int y) {
  13. x += y;
  14. if (x >= m) x %= m;
  15. }
  16.  
  17. void push_up(int o) {
  18. tree[o] = tree[o<<1] | tree[o<<1|1];
  19. }
  20. void rotate(int o, int x) {
  21. add (lazy[o], x);
  22. tree[o] = (tree[o] << x) | (tree[o] >> (m - x));
  23. }
  24. void push_down(int o) {
  25. if (lazy[o] != 0) {
  26. rotate (o << 1, lazy[o]);
  27. rotate (o << 1 | 1, lazy[o]);
  28. lazy[o] = 0;
  29. }
  30. }
  31. void build(int l, int r, int o) {
  32. if (l == r) {
  33. tree[o].set (a[id[l]]%m); return ;
  34. }
  35. int mid = l + r >> 1;
  36. build (lson); build (rson);
  37. push_up (o);
  38. }
  39. void updata(int ql, int qr, int x, int l, int r, int o) {
  40. if (ql <= l && r <= qr) {
  41. rotate (o, x); return ;
  42. }
  43. push_down (o);
  44. int mid = l + r >> 1;
  45. if (ql <= mid) updata (ql, qr, x, lson);
  46. if (qr > mid) updata (ql, qr, x, rson);
  47. push_up (o);
  48. }
  49. void query(int ql, int qr, int l, int r, int o) {
  50. if (ql <= l && r <= qr) {
  51. ret |= tree[o]; return ;
  52. }
  53. push_down (o);
  54. int mid = l + r >> 1;
  55. if (ql <= mid) query (ql, qr, lson);
  56. if (qr > mid) query (ql, qr, rson);
  57. }
  58.  
  59. void DFS(int u, int fa) {
  60. id[fl[u]=++tot] = u;
  61. for (auto v: edge[u]) {
  62. if (v != fa) DFS (v, u);
  63. }
  64. fr[u] = tot;
  65. }
  66.  
  67. bool is_prime(int x) {
  68. if (x == 2 || x == 3) return true;
  69. if (x % 6 != 1 && x % 6 != 5) return false;
  70. for (int i=5; i*i<=x; i+=6) {
  71. if (x % i == 0 || x % (i + 2) == 0) return false;
  72. }
  73. return true;
  74. }
  75.  
  76. int main() {
  77. scanf ("%d%d", &n, &m);
  78. for (int i=1; i<=n; ++i) {
  79. scanf ("%d", a+i);
  80. }
  81. for (int u, v, i=0; i<n-1; ++i) {
  82. scanf ("%d%d", &u, &v);
  83. edge[u].push_back (v);
  84. edge[v].push_back (u);
  85. }
  86. tot = 0;
  87. DFS (1, 0);
  88. for (int i=2; i<m; ++i) {
  89. if (is_prime (i)) primes.set (i);
  90. }
  91. build (1, n, 1);
  92. scanf ("%d", &q);
  93. while (q--) {
  94. int op, v, x; scanf ("%d%d", &op, &v);
  95. if (op == 1) {
  96. scanf ("%d", &x);
  97. x %= m;
  98. updata (fl[v], fr[v], x, 1, n, 1);
  99. }
  100. else {
  101. ret.reset ();
  102. query (fl[v], fr[v], 1, n, 1);
  103. ret &= primes;
  104. printf ("%d\n", (int) ret.count ());
  105. }
  106. }
  107.  
  108. return 0;
  109. }

暴力 || 莫队+线段树 H - Fibonacci-ish II

题意:q次询问,每次对l和r的范围内的数字去重,然后升序排序,计算fib[j] * a[j]的和.

分析:目前只会暴力的思路: 先排序, 然后每一个数原先对应的询问区间内累加,O(nq)复杂度险过

  1. #include <bits/stdc++.h>
  2.  
  3. const int N = 3e4 + 5;
  4. std::pair<int, int> a[N];
  5. int fib[N];
  6. int ql[N], qr[N], last[N], step[N];
  7. int ans[N];
  8.  
  9. int main() {
  10. int n, m; scanf ("%d%d", &n, &m);
  11. for (int i=1; i<=n; ++i) {
  12. scanf ("%d", &a[i].first);
  13. a[i].second = i;
  14. }
  15. std::sort (a+1, a+1+n);
  16. fib[0] = 1; fib[1] = 1;
  17. for (int i=2; i<=n; ++i) fib[i] = (fib[i-2] + fib[i-1]) % m;
  18. int q; scanf ("%d", &q);
  19. for (int i=0; i<q; ++i) {
  20. scanf ("%d%d", ql+i, qr+i);
  21. last[i] = -1;
  22. }
  23. for (int i=1; i<=n; ++i) {
  24. int v = a[i].first % m;
  25. for (int j=0; j<q; ++j) {
  26. if (a[i].second < ql[j] || a[i].second > qr[j]) continue;
  27. if (a[i].first == last[j]) continue;
  28. ans[j] = (ans[j] + v * fib[step[j]++]) % m;
  29. last[j] = a[i].first;
  30. }
  31. }
  32. for (int i=0; i<q; ++i) printf ("%d\n", ans[i]);
  33.  
  34. return 0;
  35. }

  

Manthan, Codefest 16的更多相关文章

  1. Manthan, Codefest 16 D. Fibonacci-ish

    D. Fibonacci-ish time limit per test 3 seconds memory limit per test 512 megabytes input standard in ...

  2. Manthan, Codefest 16(B--A Trivial Problem)

    B. A Trivial Problem time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  3. Manthan, Codefest 16 -C. Spy Syndrome 2

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  4. Manthan, Codefest 16 -A Ebony and Ivory

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  5. CF Manthan, Codefest 16 G. Yash And Trees 线段树+bitset

    题目链接:http://codeforces.com/problemset/problem/633/G 大意是一棵树两种操作,第一种是某一节点子树所有值+v,第二种问子树中节点模m出现了多少种m以内的 ...

  6. CF #Manthan, Codefest 16 C. Spy Syndrome 2 Trie

    题目链接:http://codeforces.com/problemset/problem/633/C 大意就是给个字典和一个字符串,求一个用字典中的单词恰好构成字符串的匹配. 比赛的时候是用AC自动 ...

  7. CF Manthan, Codefest 16 B. A Trivial Problem

    数学技巧真有趣,看出规律就很简单了 wa 题意:给出数k  输出所有阶乘尾数有k个0的数 这题来来回回看了两三遍, 想的方法总觉得会T 后来想想  阶乘 emmm  1*2*3*4*5*6*7*8*9 ...

  8. Manthan, Codefest 16 H. Fibonacci-ish II 大力出奇迹 莫队 线段树 矩阵

    H. Fibonacci-ish II 题目连接: http://codeforces.com/contest/633/problem/H Description Yash is finally ti ...

  9. Manthan, Codefest 16 E. Startup Funding ST表 二分 数学

    E. Startup Funding 题目连接: http://codeforces.com/contest/633/problem/E Description An e-commerce start ...

随机推荐

  1. iOS开发UI篇—UIScrollView控件实现图片缩放功能

    iOS开发UI篇—UIScrollView控件实现图片缩放功能 一.缩放 1.简单说明: 有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对 ...

  2. 3dmax导出3ds具有过多要导出的面超过64k解决方法

    参考:http://blog.sina.com.cn/s/blog_7a71dd090100w3r0.html 修改器->网格编辑->ProOptimizer 选中对象, 原始模型 顶点数 ...

  3. 打开Genesis设置单位为mm

    打开Genesis界面: 点击Configuration: 可看到只要设置get_def_units的值即可: 打开C:\genesis\sys\config配置文件,在最后一行加入:get_def_ ...

  4. JS打造的跟随鼠标移动的酷炫拓扑图案

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. c_test

    1.int a[][4]={0,0};与int a[3][4] = {0}; 元素不够的就以位模式初始化为0 a[第一维][第二维] 的大小,也就是最多存几个 int a[][3]={1,2,3,4, ...

  6. GB2312、GBK和UTF-8三种编码以及QT中文显示乱码问题

    1.GB2312.GBK和UTF-8三种编码的简要说明 GB2312.GBK和UTF-8都是一种字符编码,除此之外,还有好多字符编码.只是对于我们中国人的应用来说,用这三种编码 比较多.简单的说一下, ...

  7. .NET生成带Logo的二维码

    使用ThoughtWorks.QRCode生成,利用这个库来生成带Logo的二维码(就是中间嵌了一个图片的二维码),直接见代码: HttpContext context = HttpContext.C ...

  8. WPF 自定义Metro Style窗体

    为了使WPF程序在不同版本的操作系统上保持一致的显示效果,我们需要重写WPF控件样式.这篇博客将展示如何创建一个Metro Style的WPF窗体. 首先先看一下最终窗体的效果图, 通过截图我们可以看 ...

  9. 介绍n款计算机视觉库/人脸识别开源库/软件

    计算机视觉库 OpenCV OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV 拥有包括 300 多个 ...

  10. Computer Graphics Research Software

    Computer Graphics Research Software Helping you avoid re-inventing the wheel since 2009! Last update ...