A.http://acm.hdu.edu.cn/showproblem.php?pid=5538

求表面积,只需要将所有的1*1的小块扫描一遍。将每一个块与他相邻四周进行比较,如果该快高度大,则将该快高度减去周围块高度然后累加。复杂度O(nm)

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<cmath>
  4. #include<algorithm>
  5. typedef long long LL;
  6. const double EPS = 1e-8;
  7. const double PI = acos(-1.0);
  8. using namespace std;
  9. const int MAXN = 55;
  10. int n, m;
  11. int a[MAXN][MAXN];
  12. int dir[4][2] = { { 0, 1 }, { 0, -1 }, { -1, 0 }, { 1, 0 } };
  13. int main(){
  14. int T, i, j, k;
  15. scanf("%d\n", &T);
  16. while (T--){
  17. memset(a, 0, sizeof(a));
  18. int ans = 0;
  19. scanf("%d%d", &n, &m);
  20. for (i = 1; i <= n; i++)
  21. for (j = 1; j <= m; j++){
  22. scanf("%d", &a[i][j]);
  23. if (a[i][j] > 0)
  24. ans++;
  25. }
  26. for (i = 1; i <= n; i++)
  27. for (j = 1; j <= m; j++){
  28. for (k = 0; k < 4; k++){
  29. int x = i + dir[k][0];
  30. int y = j + dir[k][1];
  31. if (a[x][y] < a[i][j]){
  32. ans += a[i][j] - a[x][y];
  33. }
  34. }
  35. }
  36. printf("%lld\n", ans);
  37. }
  38. return 0;
  39. }

  2.http://acm.hdu.edu.cn/showproblem.php?pid=5532

原来序列要么按照升序,要么按照降序去判断,首先可以假定原序列是升序(降序同样来处理).首先将原序列从左到右扫描一遍,不断的比较相邻的两个元素,直到遇到某两元素满足

a[i]>a[i+1]或者扫描到末尾时逃出。若扫描到了末尾,则原序列是增序列,满足条件。若是遇到a[i]>a[i+1]跳出,则我们可以断定,我们要删去的元素一定是a[i]或者a[i+1],可以这样来想,如果删去的是其它元素,则该序列中还是存在a[i]和a[i+1]破坏来递增性。于是问题简单了,只需要分别去掉a[i],和a[i+1]来判断一下原序列是否是递增序列即可。同样的,当假设原序列是递减序列时,处理方法相同。

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<cmath>
  4. #include<algorithm>
  5. typedef long long LL;
  6. const double EPS = 1e-8;
  7. const double PI = acos(-1.0);
  8. using namespace std;
  9. const int MAXN =1000001;
  10. int a[MAXN];
  11. int n;
  12. bool UpSroted(){
  13. int i;
  14. for (i = 0; i < n - 1; i++)
  15. if (a[i]>a[i + 1]) //若遇到降序的则跳出
  16. break;
  17. if (i>=n - 2) //a[i+1]后面没有数了
  18. return true;
  19. int j = i + 2;
  20. while (j < n - 1){
  21. if (a[j]>a[j + 1])
  22. break;
  23. j++;
  24. }
  25. if (j<n - 1) //再次出现不符合
  26. return false;
  27. if (a[i] <= a[i + 2]) //去掉a[i+1]即可
  28. return true;
  29. if (a[i + 1]>a[i + 2])
  30. return false;
  31. if (i == 0)
  32. return true;
  33. if (a[i - 1] <= a[i + 1])
  34. return true;
  35. return false;
  36. }
  37.  
  38. bool DownSroted(){
  39. int i;
  40. for (i = 0; i < n - 1; i++)
  41. if (a[i]<a[i + 1]) //若遇到降序的则跳出
  42. break;
  43. if (i >= n - 2) //a[i+1]后面没有数了
  44. return true;
  45. int j = i + 2;
  46. while (j < n - 1){
  47. if (a[j]<a[j + 1])
  48. break;
  49. j++;
  50. }
  51. if (j<n - 1) //再次出现不符合
  52. return false;
  53. if (a[i] >= a[i + 2]) //去掉a[i+1]即可
  54. return true;
  55. if (a[i + 1]<a[i + 2])
  56. return false;
  57. if (i == 0)
  58. return true;
  59. if (a[i - 1] >= a[i + 1])
  60. return true;
  61. return false;
  62. }
  63. int main(){
  64. int T, i;
  65. scanf("%d\n", &T);
  66. while (T--){
  67. scanf("%d", &n);
  68. for (i = 0; i < n; i++)
  69. scanf("%d", &a[i]);
  70. bool flag = UpSroted() || DownSroted();
  71. if (flag)
  72. printf("YES\n");
  73. else
  74. printf("NO\n");
  75. }
  76. return 0;
  77. }

  3.http://acm.hdu.edu.cn/showproblem.php?pid=5533

原问题给出的都是整数点,这样以来就只有正方形符合要求了,只需要判断一下给定的是否是4个点,这四个点是否可以构成正方形。

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. const double PI = acos(-1.0);
  7. const int N = 300;
  8. const double EPS = 1e-8;//实数精度
  9. //点结构类型
  10. struct Point{
  11. double x, y;
  12. Point(double a = 0, double b = 0){ x = a; y = b; }
  13. };
  14. Point operator-(Point a, Point b){
  15. return Point(a.x - b.x, a.y - b.y);
  16. }
  17. //重载==,判断点a,b是否相等
  18. bool operator==(Point a, Point b){
  19. return abs(a.x - b.x) < EPS&&abs(a.y - b.y) < EPS;
  20. }
  21. //比较实数r1与r2的大小关系
  22. int RlCmp(double r1, double r2 = 0){
  23. if (abs(r1 - r2) < EPS)
  24. return 0;
  25. return r1>r2 ? 1 : -1;
  26. }
  27. double Dot(Point p1, Point p2, Point p3, Point p4){
  28. Point a = p2 - p1;
  29. Point b = p4 - p3;
  30. return a.x*b.x + a.y*b.y;
  31. }
  32. //检查以p1p2和p3p4为对角线是否可以构成正方形
  33. bool firstCheck(Point p1, Point p2, Point p3, Point p4){
  34. Point mid0 = Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2);
  35. Point mid1 = Point((p3.x + p4.x) / 2, (p3.y + p4.y) / 2);
  36. if (!(mid0 == mid1)) //如果中点不重合
  37. return false;
  38. return RlCmp(Dot(p1, p2, p3, p4)) == 0; //对角线垂直
  39. }
  40. bool isSqual(Point P[]){
  41. return firstCheck(P[0], P[1], P[2], P[3]) ||
  42. firstCheck(P[0], P[2], P[1], P[3]) ||
  43. firstCheck(P[0], P[3], P[1], P[2]);
  44. }
  45. int main(){
  46. Point P[N];
  47. int T,i,n;
  48. double x, y;
  49. scanf("%d", &T);
  50. while (T--){
  51. scanf("%d", &n);
  52. for (i = 0; i < n; i++){
  53. scanf("%lf%lf", &x, &y);
  54. P[i] = Point(x, y);
  55. }
  56. if (n != 4){
  57. printf("NO\n");
  58. continue;
  59. }
  60. if (isSqual(P))
  61. printf("YES\n");
  62. else
  63. printf("NO\n");
  64. }
  65. return 0;
  66. }

  4.http://acm.hdu.edu.cn/showproblem.php?pid=5536

该问题是贪心+字典树。虽然网上有O(n^3)爆力剪枝可以过,表示不会。将每一个数字的二进制从高位到低位存入到字典树中形成01串。这时候我们需要一个节点变量v,每次插入只需要将v++.接下来,枚举a[i],a[j](j>i),首先在字典树中删掉a[i]和a[j],删除做法很简单,将对应节点位置v--即可,然后用a[i]+a[j]在字典树中进行01串的匹配,匹配完后再插入a[i],a[j]准备下一次的匹配。匹配方法采用贪心思想,依次从高位向低位匹配,若当前数该位为1则去优先匹配0,若没有0匹配,则只能匹配1了。当前位置是0,则优先去匹配1,当没有1匹配,就只能匹配0了。如此下去,直到匹配到最后一位。这样有一个问题,每一个数二进制串长度不一样,给匹配带来不便,做法是,将所有的串高位补0,使得长度为32位。这样就可开心的匹配了。

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<algorithm>
  4. typedef long long LL;
  5. const int MAXN = 1000+10;
  6. using namespace std;
  7. struct TrieNode{
  8. TrieNode(){ memset(next, 0, sizeof(next)); v = 0; }
  9. TrieNode* next[2];
  10. LL v;
  11. };
  12. LL MAX;
  13. TrieNode *root;
  14. void Insert(LL x){
  15. TrieNode*p = root;
  16. MAX = 1;
  17. MAX <<= 32;
  18. for (LL i =MAX; i >0; i>>=1){
  19. LL id =(i&x)>0;
  20. if (p->next[id] == NULL)
  21. p->next[id] = new TrieNode;
  22. p = p->next[id];
  23. p->v++;
  24. }
  25. }
  26. void Delete(LL x){
  27. TrieNode*p = root;
  28. MAX = 1;
  29. MAX <<= 32;
  30. for (LL i = MAX; i >0; i >>= 1){
  31. LL id = (i&x)>0;
  32. p = p->next[id];
  33. p->v--;
  34. }
  35. }
  36. LL getMAX(LL x){
  37. TrieNode *p = root;
  38. MAX = 1;
  39. MAX <<= 32;
  40. LL rt,ans=x,i=-1;
  41. for (LL i = MAX; i >0;i>>=1){
  42. LL id = (x&i)>0;
  43. if (p->next[id ^ 1] && p->next[id ^ 1]->v > 0){
  44. if ((id == 0)) //说明x当前位为0,即将变为1
  45. ans +=i ;
  46. p = p->next[id ^ 1];
  47. continue;
  48. }
  49. if (id) //如果x当前位置为1,则即将要变为0
  50. ans -= i;
  51. p = p->next[id];
  52. }
  53. return ans;
  54. }
  55. void Free(TrieNode*T){
  56. if (T){
  57. for (int i = 0; i < 2; i++)
  58. Free(T->next[i]);
  59. free(T);
  60. T = NULL;
  61. }
  62. }
  63. LL a[MAXN];
  64. int main(){
  65. LL n,i,j,T;
  66. scanf("%I64d", &T);
  67. while (T--){
  68. root = new TrieNode;
  69. scanf("%I64d", &n);
  70. for (i = 0; i < n; i++){
  71. scanf("%I64d", &a[i]);
  72. Insert(a[i]);
  73. }
  74. LL ans =0;
  75. for (i = 0; i < n; i++){
  76. Delete(a[i]);
  77. for (j = i + 1; j < n; j++){
  78. Delete(a[j]);
  79. ans = max(ans, getMAX(a[i] + a[j]));
  80. Insert(a[j]);
  81. }
  82. Insert(a[i]);
  83. }
  84. printf("%I64d\n",ans);
  85. Free(root);
  86. }
  87. return 0;
  88. }

 5.http://acm.hdu.edu.cn/showproblem.php?pid=5534

思维比较巧妙的一道DP题目。首先n个节点的无向树有2*(n-1)个度。每一节点至少有一个度,所以可以这样考虑,首先给每个节点分配一个度,这样还剩下2*n-2个度,于是问题就转化为了完全背包问题。需要注意的是此时背包总容量是2*n-2,价值转移方程为p[i]-p[0];

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. const int MAXN = 2005 * 2 + 1;
  6. #define INF 0x3f3f3f3f
  7. int n;
  8. int p[MAXN],f[MAXN],V;
  9. //完全背包问题
  10. void ComplePack(int w, int i){
  11. for (int j = i; j <= V; j++)
  12. f[j] = max(f[j],f[j-i] + w);
  13. }
  14. int main(){
  15. int i, T;
  16. scanf("%d", &T);
  17. while (T--){
  18. scanf("%d", &n);
  19. for (i = 0; i < n - 1; i++)
  20. scanf("%d", &p[i]);
  21. V = n - 2;
  22. for (i = 1; i < n - 1; i++)
  23. p[i] -= p[0]; //价值转移
  24. for (i = 1; i < n - 1; i++)
  25. f[i] = -INF;
  26. f[0] = p[0] * n;
  27. for (i = 1; i <= n - 2; i++){
  28. ComplePack(p[i], i);
  29. }
  30. printf("%d\n",f[n-2]);
  31. }
  32. return 0;
  33. }

  6.http://acm.hdu.edu.cn/showproblem.php?pid=5531

题目很长,其实题目意思很简单。题意:在一个多边形每一个顶点以顶点为圆心都构造一个园,相邻顶点的园外切,不相邻的顶点的圆无限制。问是否存在这样的构造,存在则还要要求求出所有圆面积和的最小值,以及对应的园的半径。

设多边形的n个点是p1,p2,...pn.n个园半径依次为r1,r2,r3...rn.设d1=p1p2,d2=p2p3,...,dn-1=pn-1pn,dn=pnp1.于是由园相切,我们可以得到n个关系式:

r1+r2=d1

r2+r3=d2

.....

rn-1+rn=dn-1

rn+r1=dn

这时候我们要对n分奇偶数讨论。设数组dis[i]=d[1]-d[2]+d[3]-d[4]...+(-1)i-1*d[i];如果n是奇数,则迭代可知上面n个等式必然有唯一解,求出此解,然后看是否所有的解大于等0即可。如果n是偶数,则上面等式前n项可以变为

r1+r2=dis[1]

r1-r3=dis[2]

r1+r4=dis[3]

....

r1+rn=dis[n-1]

r1+rn=d[n]

显然只有当d[n]==dis[n-1]时才有解。于是接下来只有n-1个方程和n个未知量,一定有解。我们注意到0<=ri<=min(d[i-1],d[i]),(i=2,3..n).而0<=r1<=min(d1,dn)

.利用以上不等式可以求出r1的取值区间。而目标函数area=(r12+r22...+rn2) *π。aera是关于r1的二次函数,对应开口向上,对称轴为(dis[1]+disp[2]...+dis[n-1])/n.

这样最值问题就求解了。

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. const double EPS = 1e-8;
  7. const double pi = acos(-1.0);
  8. const int MAXN = 100000 + 10;
  9. struct Point{
  10. double x, y;
  11. };
  12. struct Intervel{
  13. double s, e;
  14. Intervel(double a = 0, double b = 0) :s(a), e(b){}
  15. };
  16. int n;
  17. Point P[MAXN];
  18. double r[MAXN], d[MAXN],dis[MAXN];
  19. double Distance(Point p1, Point p2){
  20. return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y));
  21. }
  22. int RlCmp(double r1, double r2 = 0){
  23. if (abs(r1 - r2) < EPS)
  24. return 0;
  25. return r1>r2?1 : -1;
  26. }
  27. bool Intersect(Intervel x, Intervel y,Intervel &ans){
  28. if (RlCmp(x.e, y.s) == -1)
  29. return false;
  30. if (RlCmp(y.e, x.s) == -1)
  31. return false;
  32. ans =Intervel(max(x.s, y.s), min(x.e, y.e));
  33. return true;
  34. }
  35. bool isPossible(double &area){
  36. if (n & 1){
  37. r[1] = dis[n]/ 2;
  38. if (RlCmp(r[1])==-1)
  39. return false;
  40. area = r[1] * r[1];
  41. for (int i = 2; i <= n; i++){
  42. if (i & 1)
  43. r[i] = r[1] - dis[i-1];
  44. else
  45. r[i] = dis[i-1] - r[1];
  46. if (RlCmp(r[i])==-1)
  47. return false;
  48. area += r[i] * r[i];
  49. }
  50. area *= pi;
  51. return true;
  52. }
  53. else{
  54. if (RlCmp(dis[n]))
  55. return false;
  56. bool flag = 1;
  57. Intervel curr(0,min(d[1],d[n]));
  58. for (int i = 2; i <=n; i++){
  59. if (i & 1)
  60. flag = Intersect(curr, Intervel(dis[i - 1], dis[i - 1] + min(d[i], d[i - 1])), curr);
  61. else
  62. flag = Intersect(curr, Intervel(dis[i - 1] - min(d[i], d[i - 1]),dis[i-1]), curr);
  63. if (!flag)
  64. return false;
  65. }
  66. double t = 0;
  67. for (int i = 1; i <= n - 1; i++)
  68. t += dis[i];
  69. t /= n;
  70. if (t < curr.s)
  71. r[1] = curr.s;
  72. else if (t>curr.e)
  73. r[1] = curr.e;
  74. else
  75. r[1] = t;
  76. area = r[1] * r[1];
  77. for (int i = 2; i <= n; i++){
  78. if (i & 1)
  79. r[i] = r[1] - dis[i - 1];
  80. else
  81. r[i] = dis[i - 1] - r[1];
  82. area += r[i] * r[i];
  83. }
  84. area *= pi;
  85. return true;
  86. }
  87. }
  88. int main(){
  89. int T, i;
  90. scanf("%d", &T);
  91. while (T--){
  92. scanf("%d", &n);
  93. for (i = 1; i <= n; i++)
  94. scanf("%lf%lf", &P[i].x, &P[i].y);
  95. for (i = 1; i < n; i++)
  96. d[i] = Distance(P[i], P[i + 1]);
  97. d[n] = Distance(P[1], P[n]);
  98. dis[0] = 0;
  99. for (i = 1; i <= n; i++){
  100. if (i & 1)
  101. dis[i]=dis[i-1]+d[i];
  102. else
  103. dis[i]=dis[i-1]-d[i];
  104. }
  105. double area;
  106. bool ans = isPossible(area);
  107. if (ans){
  108. printf("%.2lf\n", area);
  109. for (i = 1; i <= n; i++)
  110. printf("%.2lf\n",r[i]);
  111. }
  112. else
  113. printf("IMPOSSIBLE\n");
  114. }
  115. return 0;
  116. }

  7.http://acm.hdu.edu.cn/showproblem.php?pid=5527

一道很好的贪心题目。我们要考虑选取数来凑p,但是呢,每个硬币个数是有限制的,顺着贪心是无法下手的。总的硬币个数num和总的钱total是知道的,求凑p得到最大也就是求凑total-p的最小,因为他们的和就是num。于是我们来逆向考虑求最小值。这样我们从最大的硬币选取,一直贪心选下来,基于这样算法成立的条件是,前面硬币面值一定是后面硬币面值的约数,只有这样,前面硬币能达到超过该硬币的值,一定可以用该硬币来替代而使得总硬币个数更小。硬币面值 1  5 10 20 50 100 200 500 1000 2000,我们发现有两对不满足,20 50和200 500,于是会产生这样一个问题。比如我现在有20硬币*3,50硬币*1,当前要选取等于60的硬币,如果贪心来选首选的是50,而实际应该选择是20*3.产生这个原因是由于20不是50的约数。解决的办法就是对50,500进行特判,枚举他们的奇偶情况,因为2个50可以当做100来使用。1. 50奇500偶数。2. 50偶数 500奇数

3. 50奇数 500奇数 4. 50偶数 500偶数。然后把4种情况跑一下就OK了。

  1. #define _CRT_SECURE_NO_DEPRECATE
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. typedef long long LL;
  6. LL p, total,num;
  7. LL nl[11];
  8. LL c[11] = { 0, 1, 5, 10, 20, 50, 100, 200, 500, 1000, 2000 };
  9. LL Compute(LL pp){
  10. LL i, ans = 0;
  11. if (pp<0)
  12. return -1;
  13. for (i = 10; i > 0; i--){
  14. LL k = min(pp/c[i],nl[i]);
  15. if ((k&1)&&(i == 5 || i == 8))
  16. k--; //只可以用掉偶数个
  17. ans += k;
  18. pp-= k*c[i];
  19. }
  20. if (pp!= 0)
  21. return -1;
  22. return num - ans;
  23. }
  24. LL Slove(){
  25. LL ans = -1,pp,ret;
  26. //下面对四中情况进行枚举
  27. if (nl[5] > 0){
  28. nl[5]--;
  29. pp = p - c[5];
  30. ret=Compute(pp);
  31. ans = max(ans, ret-1);
  32. nl[5]++;
  33. }
  34. if (nl[8] > 0){
  35. nl[8]--;
  36. pp = p - c[8];
  37. ret = Compute(pp);
  38. ans = max(ans, ret-1);
  39. nl[8]++;
  40. }
  41. if (nl[5] > 0 && nl[8] > 0){
  42. nl[5]--;nl[8]--;
  43. pp = p - c[5] - c[8];
  44. ret = Compute(pp);
  45. ans = max(ans, ret-2);
  46. nl[5]++; nl[8]++;
  47. }
  48. pp = p;
  49. ret=Compute(pp);
  50. ans = max(ans, ret);
  51. return ans;
  52. }
  53. int main(){
  54. LL i, T;
  55. scanf("%I64d", &T);
  56. while (T--){
  57. total = num = 0;
  58. scanf("%I64d", &p);
  59. for (i = 1; i <= 10; i++)
  60. scanf("%I64d", &nl[i]);
  61. for (i = 1; i <=10; i++){
  62. num += nl[i]; //计算总个数
  63. total += c[i] * nl[i]; //计算总money
  64. }
  65. p = total - p; //从反面考虑
  66.  
  67. LL ans = Slove();
  68. printf("%I64d\n", ans);
  69. }
  70. return 0;
  71. }

  

2016summer 训练第一场的更多相关文章

  1. 大家一起做训练 第一场 E Number With The Given Amount Of Divisors

    题目来源:CodeForce #27 E 题目意思和题目标题一样,给一个n,求约数的个数恰好为n个的最小的数.保证答案在1018内. Orz,这题训练的时候没写出来. 这道题目分析一下,1018的不大 ...

  2. 大家一起做训练 第一场 B Tournament

    题目来源:CodeForce #27 B 有n个人比赛,两两之间都有一场比赛,一共 n * (n - 1) / 2 场比赛.每场比赛的记录方式是 a b,表示在a和b的比赛中,a胜出,b失败. 经过研 ...

  3. 牛客网多校训练第一场 I - Substring(后缀数组 + 重复处理)

    链接: https://www.nowcoder.com/acm/contest/139/I 题意: 给出一个n(1≤n≤5e4)个字符的字符串s(si ∈ {a,b,c}),求最多可以从n*(n+1 ...

  4. 2015多校联合训练第一场Tricks Device(hdu5294)

    题意:给一个无向图,给起点s,终点t,求最少拆掉几条边使得s到不了t,最多拆几条边使得s能到t 思路: 先跑一边最短路,记录最短路中最短的边数.总边数-最短边数就是第二个答案 第一个答案就是在最短路里 ...

  5. Gym-101653:acific Northwest Regional Contest (2019训练第一场)

    本套题没有什么数据结构题,图论题,唯一有价值的就是Q题博弈,在最后面,读者可以直接拉到最下面. (还剩下两个,估计每什么价值的题,懒得补了 M .Polyhedra pro:欧拉公式,V-E+F=2: ...

  6. 大家一起做训练 第一场 G CD

    题目来源:UVA 624 题目的意思就是:我现在需要从 t 张CD中拿出一部分来,尽可能的凑出接近 N 这么久的音乐,但是不能超过 N. CD不超过20张,每张长度不超过 N ,不能重复选. 一个很简 ...

  7. 大家一起做训练 第一场 A Next Test

    题目来源:CodeForce #27 A 题目的意思简而言之就是要你输出一个没有出现过的最小的正整数. 题意如此简单明了,做法也很明了. 直接读入所有的数,然后排个序,设置个变量从1开始,出现过+1, ...

  8. 牛客网多校训练第一场 J - Different Integers(树状数组 + 问题转换)

    链接: https://www.nowcoder.com/acm/contest/139/J 题意: 给出n个整数的序列a(1≤ai≤n)和q个询问(1≤n,q≤1e5),每个询问包含两个整数L和R( ...

  9. 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)

    链接: https://www.nowcoder.com/acm/contest/139/F 题意: 分析: 转载自:http://tokitsukaze.live/2018/07/19/2018ni ...

随机推荐

  1. vue - computed

    computed 的作用主要是对原数据进行改造输出.改造输出:包括格式的编辑,大小写转换,顺序重排,添加符号……. 一.格式化输出结果: 我们先来做个读出价格的例子:我们读书的原始数据是price:1 ...

  2. js作用域的理解

    script:自上而下 全局变量.全局函数 函数:由里到外 浏览器: “JS解析器” 1)“找一些东西”: var function 参数 a = undefine 所有的变量,在正式运行代码之前,都 ...

  3. gcc编译生成静态及动态链接库步骤

    gcc编译生成静态及动态链接库步骤 这两天在看<Linux C程序设计大全>,吴岳编著,清华大学出版社.这本书是在一个培训机构看到的,在网上查了下该书的相关信息.从目录而言,该书涵盖了Li ...

  4. 游戏(game)

    游戏(game) 题目描述 这个游戏是这样的,你有一个初始序列S ,你每次可以选择一段任意长度的连续区间,把他们+1 再膜k,给定目标序列,你需要尝试用尽量少的操作次数将初始序列变为目标序列.作为一名 ...

  5. BZOJ3203 保护出题人(defend)

    保护出题人(defend) 题目描述 输入 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离. 接下来n行每行两个空格隔开的正整数,第i + 1行为 a i和 x i,分别表示相比上一 ...

  6. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  7. Linux调用fork()编程

    本文出自:svitter's blog #include <iostream> #include <cstdio> #include <unistd.h> usin ...

  8. nodeJS学习(5) --- sublime Text3 安装使用

    本节对对工具 sublime Text3 的安装进行简介. 主要参考网址:http://blog.csdn.net/sam976/article/details/52076271   http://w ...

  9. iOS不用官方SDK实现微信和支付宝支付XHPayKit

    作者:朱晓辉Allen 链接:https://juejin.im/post/5a90dd3a6fb9a0634912b755 前言 前段时间由于项目需求,移除了项目中的微信支付SDK和支付宝支付SDK ...

  10. 【BZOJ4477】字符串树(可持久化Trie)

    此题花费我整整三天的功夫.还在NoiP贴吧发过贴. 最后发现trie树建新节点时信息未完全复制,真是愚蠢之极. 言归正传. 如果我们已经知道了每个点上的trie树那么询问就是sum[x]+sum[y] ...