LINK

A 找最长非公共子序列..如果两串不是完全相同 显然就是最长的那个

  1. /** @Date : 2017-04-15 19:52:34
  2. * @FileName: 766A.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoundEarlf@gmail.com)
  5. * @Link : https://github.com/Lweleth
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 1e5+20;
  22. const double eps = 1e-8;
  23.  
  24. int main()
  25. {
  26. string a, b;
  27. cin >> a >> b;
  28. if(a == b)
  29. printf("-1\n");
  30. else printf("%d\n", max(a.length(), b.length()));
  31. return 0;
  32. }

B 给出一些数 问里面是否存在三个数能构成三角形 排个序遍历一遍即可 递增数列下,连续的三个数是最可能满足条件的情况了

  1. /** @Date : 2017-04-15 20:01:31
  2. * @FileName: 766B.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoundEarlf@gmail.com)
  5. * @Link : https://github.com/Lweleth
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 1e5+20;
  22. const double eps = 1e-8;
  23.  
  24. int a[N];
  25. int main()
  26. {
  27. int n;
  28. while(cin >> n)
  29. {
  30. for(int i = 0; i < n; i++)
  31. scanf("%d", a + i);
  32. sort(a, a + n);
  33. int flag = 0;
  34. for(int i = 1; i < n - 1; i++)
  35. {
  36. if(flag)
  37. break;
  38. if(a[i] + a[i - 1] > a[i + 1])
  39. flag = 1;
  40. }
  41. if(flag)
  42. printf("YES\n");
  43. else printf("NO\n");
  44. }
  45. return 0;
  46. }

C

题意:给出一字符串,26个字母对应了最大分割长度b['a'~'z'](即分割完长度不超过b[i]),问在里面做分割,满足条件的分割有多少种,并取模1e9+7,以及分割后里面最小的长度。

思路:DP。枚举位置,从该位置向前推,直到不满足条件位置为止,期间不断转移dp[i]+=dp[j - 1],并更新最大数量和最小长度即可

  1. /** @Date : 2017-04-16 00:27:49
  2. * @FileName: 766B DP.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoundEarlf@gmail.com)
  5. * @Link : https://github.com/Lweleth
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 1e5+20;
  22. const double eps = 1e-8;
  23. const int mod = 1e9+7;
  24. char a[1500];
  25. int dp[1500];
  26. int dp2[1500];
  27. int len[50];
  28. int main()
  29. {
  30. int n;
  31. while(cin >> n)
  32. {
  33. scanf("%s", a + 1);
  34. for(int i = 0; i < 26; i++)
  35. scanf("%d", len + i);
  36. int ma = -1;
  37. int mi = INF;
  38. MMF(dp);
  39. dp[0] = 1;//代表0~i的分割数
  40. dp2[0] = 0;//代表0~i里的最小分割长度
  41. for(int i = 1; i <= n; i++)
  42. {
  43. dp2[i] = INF;
  44. mi = INF;
  45. int le = INF;
  46. for(int j = i; j >= 1; j--)//枚举所有可能分割的位置
  47. {
  48. le = min(le, min(len[a[i] - 'a'], len[a[j]-'a']));//满足分割后字母对应 字符串长度的限制
  49. if(le < i - j + 1)
  50. break;
  51. dp[i] = (dp[i] + dp[j - 1]) % mod;//对每个可分割的位置进行转移
  52. mi = min(mi, dp2[j - 1]);
  53. ma = max(ma, i - j + 1);
  54. }
  55. dp2[i] = mi + 1;
  56. }
  57.  
  58. printf("%d\n%d\n%d\n", dp[n], ma, dp2[n]);
  59. }
  60. return 0;
  61. }

D

题意:给出一些词语间的关系,问里面每个关系是否成立。就是个种类并查集

思路:可以用偏移量写,也可以用秩来写。

  1. /** @Date : 2017-04-16 16:14:15
  2. * @FileName: 766D 种类并查集.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoundEarlf@gmail.com)
  5. * @Link : https://github.com/Lweleth
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 1e5+20;
  22. const double eps = 1e-8;
  23.  
  24. map<string, int>mir;
  25.  
  26. int fa[N];
  27. int rk[N];
  28. int n, m, q;
  29.  
  30. int find(int x)
  31. {
  32. int df;
  33. if(fa[x] == x)
  34. return x;
  35. df = fa[x];
  36. fa[x] = find(fa[x]);
  37. rk[x] = (rk[x] + rk[df]) & 1;
  38. return fa[x];
  39. }
  40.  
  41. int join(int x, int y, int f)
  42. {
  43. int a = find(x);
  44. int b = find(y);
  45. //cout << a << "~" << b;
  46. if(a != b)
  47. {
  48. if(f == 3)//判断用
  49. return 2;
  50.  
  51. fa[b] = a;
  52. rk[b] = (f + rk[x] - rk[y] + 2) % 2;
  53. return 1;
  54. }
  55. else
  56. {
  57. int t = (rk[x] - rk[y] + 2) % 2;
  58. //cout <<"$"<< t << endl;
  59. if(f == 3)//判断用
  60. return (t==0);
  61.  
  62. if(t == f)
  63. return 1;
  64. else
  65. return 0;
  66. }
  67. }
  68. int main()
  69. {
  70. while(cin >> n >> m >> q)
  71. {
  72. mir.clear();
  73. string x, y;
  74. int t;
  75. for(int i = 1; i <= n; i++)
  76. {
  77. fa[i] = i, rk[i] = 0;
  78. cin >> x;
  79. mir[x] = i;
  80. }
  81. for(int i = 0; i < m; i++)
  82. {
  83. scanf("%d", &t);
  84. t -= 1;
  85. cin >> x >> y;
  86. int ans = join(mir[x], mir[y], t);
  87. printf("%s\n", ans?"YES":"NO");
  88. }
  89. for(int i = 0; i < q; i++)
  90. {
  91. cin >> x >> y;
  92. int ans = join(mir[x], mir[y], 3);
  93. if(ans == 2)
  94. printf("3\n");
  95. else
  96. printf("%d\n", ans?1:2);
  97. }
  98. }
  99. return 0;
  100. }

E

题意:给出一棵树,求所有节点和其它节点的距离和(距离和定义为异或和)

思路:对所有节点的值按二进制分解(异或和的性质),枚举所有二进制位,并储存所有节点权值在当前位下1或0,dfs一遍转移所有0和1,最后统计即可。其中dp[i][0]代表以i为根的所有子节点拥有的0个数。那么对于当前节点为now,下一个节点为nextp的异或和为1的情况数为sum += dp[nextp][0]*dp[now][1]+dp[nextp][1]*dp[now][0],最后答案为对每一位 sum * (1 << i) 求和

  1. /** @Date : 2017-04-16 20:55:11
  2. * @FileName: 766E 树形DP.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoundEarlf@gmail.com)
  5. * @Link : https://github.com/Lweleth
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 1e5+20;
  22. const double eps = 1e-8;
  23.  
  24. int n, x, y;
  25. int a[N];
  26. vectorvt[N];
  27. int bit[N];
  28. int dp[N][2];
  29. LL dfs(int s, int pre)
  30. {
  31. dp[s][0] = dp[s][1] = 0;
  32. dp[s][bit[s]]++;
  33. LL sum = bit[s];
  34. //ans += a[s];
  35. for(int i = 0; i < vt[s].size(); i++)
  36. {
  37. int np = vt[s][i];
  38. if(np == pre)
  39. continue;
  40. sum += dfs(np, s);
  41. sum += dp[s][0] * dp[np][1] + dp[s][1] * dp[np][0];
  42. //cout << sum << endl;
  43. dp[s][bit[s]] += dp[np][0];
  44. dp[s][bit[s] ^ 1] += dp[np][1];
  45. }
  46. return sum;
  47.  
  48. }
  49.  
  50. int main()
  51. {
  52. while(cin >> n)
  53. {
  54. MMF(dp);
  55. LL ans = 0;
  56. vt[0].clear();
  57. for(int i = 1; i <= n; i++)
  58. scanf("%d", a + i), vt[i].clear();
  59. for(int i = 1; i < n; i++)
  60. {
  61. scanf("%d%d", &x, &y);
  62. vt[x].PB(y);
  63. vt[y].PB(x);
  64. }
  65. for(int i = 0; i < 21; i++)// 对每一位上的1和0进行 统计
  66. {
  67. for(int j = 1; j <= n; j++)//对每个节点的数进行分解
  68. {
  69. if(a[j] & (1 << i))
  70. bit[j] = 1;
  71. else bit[j] = 0;
  72. }
  73. ans += dfs(1, 0) * (1 << i);
  74. }
  75.  
  76. printf("%lld\n", ans);
  77. }
  78. return 0;
  79. }

CF766 ABCDE的更多相关文章

  1. 面试题目“ABCDE × 4 = EDCBA”新解法

    ABCDE*4=EDCBA 在面试宝典上面看到的一道题目,也是一道老掉牙的题目了,题目详情:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来. 网上流传的代码都是对5位数ABCD ...

  2. CDOJ ABCDE dp(前缀和优化)

    题目链接: http://acm.uestc.edu.cn/#/problem/show/1307 ABCDE Time Limit: 1000/1000MS (Java/Others)Memory ...

  3. CDOJ 1307 ABCDE 前缀和优化dp

    ABCDE 题目连接: http://acm.uestc.edu.cn/#/problem/show/1307 Description Binary-coded decimal (BCD) is a ...

  4. Codeforces Round #261 (Div. 2)[ABCDE]

    Codeforces Round #261 (Div. 2)[ABCDE] ACM 题目地址:Codeforces Round #261 (Div. 2) A - Pashmak and Garden ...

  5. 一个五位数ABCDE乘以9,得到EDCBA,求此五位数

    此题是面试时某面试官突然抛出的,要求逻辑分析推导,不许编码,5分钟时间算出来最终结果,当然,最终没有完全推算出来 下面是编码实现 #一个五位数ABCDE*9=EDCBA,求此数 for a in ra ...

  6. ABCDE

    ABCDE A-Artificial intelligence 人工智能 B-Block chain 区块链 C-Cloud 云 D-Big Data 大数据 E-Ecology 互联网生态是以互联网 ...

  7. 第12章、乐活人生的ABCDE

    目录 第12章.乐活人生的ABCDE 什么时候该乐观 让自己乐观的ABC 确认ABC 你的ABC记录 反驳和转移注意 转移注意 反驳 保持距离 学习与自己争辩 证据 其他可能性 暗示 用处 你的反驳记 ...

  8. 埃利斯(A.Ellis)ABCDE情绪管理理论

    埃利斯(A.Ellis)ABCDE情绪管理理论A :Activating Events(诱发事件)B :Beliefs(个体对诱发事件的评价.解释.看法)C :Consequences(个体情绪和行为 ...

  9. 聪明的暴力枚举求abcde/fghij=n

    目录 前言 一.题目 二.暴力初解 三.优化再解(借鉴bitmap) 总结 前言 枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的 ...

随机推荐

  1. UVALive 6913 I Want That Cake 博弈+dp

    题目链接: http://acm.hust.edu.cn/vjudge/problem/96343 I Want That Cake Time Limit: 3000MS 64bit IO Forma ...

  2. POJ题目分类推荐 (很好很有层次感)

    著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299 ...

  3. Linux架设DDNS服务器之自动更新脚本

    问题描述:客户端是动态IP,每次连网之后要nsupdate下才可以把客户端的hostname 与IP映射更新到DNS Server上 命令如下: nsupdate -k K*****.key > ...

  4. Android Studio -导入项目 gradle处理

    如果导入 android studio 项目, 那么一定要注意 需要合适的gradle版本,具体方法为: 首先导入步骤: 打开android studio ==> File ==> New ...

  5. Java容器深入浅出之数组

    写在前面 关于Java的学习,特别是对于非计算机专业的同学来说,我总是主张从实践中来,到实践中去的学习方法.Java本身是一门应用性特别强的高级编程语言,因此如果能在基于实际开发的经验基础上,对Jav ...

  6. 【Linux笔记】阿里云服务器被暴力破解

    一.关于暴力破解 前几天新购进了一台阿里云服务器,使用过程中时常会收到“主机被暴力破解”的警告,警告信息如下: 云盾用户您好!您的主机:... 正在被暴力破解,系统已自动启动破解保护.详情请登录htt ...

  7. MVC 中创建自己的异常处理

    1.新建类一个类继承 HandleErrorAttribute 类把异常书写到队列中 public class MyExceptionAttribute: HandleErrorAttribute { ...

  8. 第92天:CSS3中颜色和文本属性

    一.颜色的表示方式 1. rgba(255,0,0,0.1)  rgba是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha透明度.虽然它有的时候被描述为一个颜色空间 新增了RGB ...

  9. java学习4-Maven的发布war并部署到tomcat

    1.点击生成-->Build Artifacts ,具体下图下图 2.生成完后会在target下出现一个war文件 3.部署到tomcat 复制war文件到tomcat/webapps,重启to ...

  10. 【BZOJ3771】Triple(生成函数,多项式运算)

    [BZOJ3771]Triple(生成函数,多项式运算) 题面 有\(n\)个价值\(w\)不同的物品 可以任意选择\(1,2,3\)个组合在一起 输出能够组成的所有价值以及方案数. \(n,w< ...