CF766 ABCDE
A 找最长非公共子序列..如果两串不是完全相同 显然就是最长的那个
- /** @Date : 2017-04-15 19:52:34
- * @FileName: 766A.cpp
- * @Platform: Windows
- * @Author : Lweleth (SoundEarlf@gmail.com)
- * @Link : https://github.com/Lweleth
- * @Version : $Id$
- */
- #include <bits/stdc++.h>
- #define LL long long
- #define PII pair
- #define MP(x, y) make_pair((x),(y))
- #define fi first
- #define se second
- #define PB(x) push_back((x))
- #define MMG(x) memset((x), -1,sizeof(x))
- #define MMF(x) memset((x),0,sizeof(x))
- #define MMI(x) memset((x), INF, sizeof(x))
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = 1e5+20;
- const double eps = 1e-8;
- int main()
- {
- string a, b;
- cin >> a >> b;
- if(a == b)
- printf("-1\n");
- else printf("%d\n", max(a.length(), b.length()));
- return 0;
- }
B 给出一些数 问里面是否存在三个数能构成三角形 排个序遍历一遍即可 递增数列下,连续的三个数是最可能满足条件的情况了
- /** @Date : 2017-04-15 20:01:31
- * @FileName: 766B.cpp
- * @Platform: Windows
- * @Author : Lweleth (SoundEarlf@gmail.com)
- * @Link : https://github.com/Lweleth
- * @Version : $Id$
- */
- #include <bits/stdc++.h>
- #define LL long long
- #define PII pair
- #define MP(x, y) make_pair((x),(y))
- #define fi first
- #define se second
- #define PB(x) push_back((x))
- #define MMG(x) memset((x), -1,sizeof(x))
- #define MMF(x) memset((x),0,sizeof(x))
- #define MMI(x) memset((x), INF, sizeof(x))
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = 1e5+20;
- const double eps = 1e-8;
- int a[N];
- int main()
- {
- int n;
- while(cin >> n)
- {
- for(int i = 0; i < n; i++)
- scanf("%d", a + i);
- sort(a, a + n);
- int flag = 0;
- for(int i = 1; i < n - 1; i++)
- {
- if(flag)
- break;
- if(a[i] + a[i - 1] > a[i + 1])
- flag = 1;
- }
- if(flag)
- printf("YES\n");
- else printf("NO\n");
- }
- return 0;
- }
C
题意:给出一字符串,26个字母对应了最大分割长度b['a'~'z'](即分割完长度不超过b[i]),问在里面做分割,满足条件的分割有多少种,并取模1e9+7,以及分割后里面最小的长度。
思路:DP。枚举位置,从该位置向前推,直到不满足条件位置为止,期间不断转移dp[i]+=dp[j - 1],并更新最大数量和最小长度即可
- /** @Date : 2017-04-16 00:27:49
- * @FileName: 766B DP.cpp
- * @Platform: Windows
- * @Author : Lweleth (SoundEarlf@gmail.com)
- * @Link : https://github.com/Lweleth
- * @Version : $Id$
- */
- #include <bits/stdc++.h>
- #define LL long long
- #define PII pair
- #define MP(x, y) make_pair((x),(y))
- #define fi first
- #define se second
- #define PB(x) push_back((x))
- #define MMG(x) memset((x), -1,sizeof(x))
- #define MMF(x) memset((x),0,sizeof(x))
- #define MMI(x) memset((x), INF, sizeof(x))
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = 1e5+20;
- const double eps = 1e-8;
- const int mod = 1e9+7;
- char a[1500];
- int dp[1500];
- int dp2[1500];
- int len[50];
- int main()
- {
- int n;
- while(cin >> n)
- {
- scanf("%s", a + 1);
- for(int i = 0; i < 26; i++)
- scanf("%d", len + i);
- int ma = -1;
- int mi = INF;
- MMF(dp);
- dp[0] = 1;//代表0~i的分割数
- dp2[0] = 0;//代表0~i里的最小分割长度
- for(int i = 1; i <= n; i++)
- {
- dp2[i] = INF;
- mi = INF;
- int le = INF;
- for(int j = i; j >= 1; j--)//枚举所有可能分割的位置
- {
- le = min(le, min(len[a[i] - 'a'], len[a[j]-'a']));//满足分割后字母对应 字符串长度的限制
- if(le < i - j + 1)
- break;
- dp[i] = (dp[i] + dp[j - 1]) % mod;//对每个可分割的位置进行转移
- mi = min(mi, dp2[j - 1]);
- ma = max(ma, i - j + 1);
- }
- dp2[i] = mi + 1;
- }
- printf("%d\n%d\n%d\n", dp[n], ma, dp2[n]);
- }
- return 0;
- }
D
题意:给出一些词语间的关系,问里面每个关系是否成立。就是个种类并查集
思路:可以用偏移量写,也可以用秩来写。
- /** @Date : 2017-04-16 16:14:15
- * @FileName: 766D 种类并查集.cpp
- * @Platform: Windows
- * @Author : Lweleth (SoundEarlf@gmail.com)
- * @Link : https://github.com/Lweleth
- * @Version : $Id$
- */
- #include <bits/stdc++.h>
- #define LL long long
- #define PII pair
- #define MP(x, y) make_pair((x),(y))
- #define fi first
- #define se second
- #define PB(x) push_back((x))
- #define MMG(x) memset((x), -1,sizeof(x))
- #define MMF(x) memset((x),0,sizeof(x))
- #define MMI(x) memset((x), INF, sizeof(x))
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = 1e5+20;
- const double eps = 1e-8;
- map<string, int>mir;
- int fa[N];
- int rk[N];
- int n, m, q;
- int find(int x)
- {
- int df;
- if(fa[x] == x)
- return x;
- df = fa[x];
- fa[x] = find(fa[x]);
- rk[x] = (rk[x] + rk[df]) & 1;
- return fa[x];
- }
- int join(int x, int y, int f)
- {
- int a = find(x);
- int b = find(y);
- //cout << a << "~" << b;
- if(a != b)
- {
- if(f == 3)//判断用
- return 2;
- fa[b] = a;
- rk[b] = (f + rk[x] - rk[y] + 2) % 2;
- return 1;
- }
- else
- {
- int t = (rk[x] - rk[y] + 2) % 2;
- //cout <<"$"<< t << endl;
- if(f == 3)//判断用
- return (t==0);
- if(t == f)
- return 1;
- else
- return 0;
- }
- }
- int main()
- {
- while(cin >> n >> m >> q)
- {
- mir.clear();
- string x, y;
- int t;
- for(int i = 1; i <= n; i++)
- {
- fa[i] = i, rk[i] = 0;
- cin >> x;
- mir[x] = i;
- }
- for(int i = 0; i < m; i++)
- {
- scanf("%d", &t);
- t -= 1;
- cin >> x >> y;
- int ans = join(mir[x], mir[y], t);
- printf("%s\n", ans?"YES":"NO");
- }
- for(int i = 0; i < q; i++)
- {
- cin >> x >> y;
- int ans = join(mir[x], mir[y], 3);
- if(ans == 2)
- printf("3\n");
- else
- printf("%d\n", ans?1:2);
- }
- }
- return 0;
- }
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) 求和
- /** @Date : 2017-04-16 20:55:11
- * @FileName: 766E 树形DP.cpp
- * @Platform: Windows
- * @Author : Lweleth (SoundEarlf@gmail.com)
- * @Link : https://github.com/Lweleth
- * @Version : $Id$
- */
- #include <bits/stdc++.h>
- #define LL long long
- #define PII pair
- #define MP(x, y) make_pair((x),(y))
- #define fi first
- #define se second
- #define PB(x) push_back((x))
- #define MMG(x) memset((x), -1,sizeof(x))
- #define MMF(x) memset((x),0,sizeof(x))
- #define MMI(x) memset((x), INF, sizeof(x))
- using namespace std;
- const int INF = 0x3f3f3f3f;
- const int N = 1e5+20;
- const double eps = 1e-8;
- int n, x, y;
- int a[N];
- vectorvt[N];
- int bit[N];
- int dp[N][2];
- LL dfs(int s, int pre)
- {
- dp[s][0] = dp[s][1] = 0;
- dp[s][bit[s]]++;
- LL sum = bit[s];
- //ans += a[s];
- for(int i = 0; i < vt[s].size(); i++)
- {
- int np = vt[s][i];
- if(np == pre)
- continue;
- sum += dfs(np, s);
- sum += dp[s][0] * dp[np][1] + dp[s][1] * dp[np][0];
- //cout << sum << endl;
- dp[s][bit[s]] += dp[np][0];
- dp[s][bit[s] ^ 1] += dp[np][1];
- }
- return sum;
- }
- int main()
- {
- while(cin >> n)
- {
- MMF(dp);
- LL ans = 0;
- vt[0].clear();
- for(int i = 1; i <= n; i++)
- scanf("%d", a + i), vt[i].clear();
- for(int i = 1; i < n; i++)
- {
- scanf("%d%d", &x, &y);
- vt[x].PB(y);
- vt[y].PB(x);
- }
- for(int i = 0; i < 21; i++)// 对每一位上的1和0进行 统计
- {
- for(int j = 1; j <= n; j++)//对每个节点的数进行分解
- {
- if(a[j] & (1 << i))
- bit[j] = 1;
- else bit[j] = 0;
- }
- ans += dfs(1, 0) * (1 << i);
- }
- printf("%lld\n", ans);
- }
- return 0;
- }
CF766 ABCDE的更多相关文章
- 面试题目“ABCDE × 4 = EDCBA”新解法
ABCDE*4=EDCBA 在面试宝典上面看到的一道题目,也是一道老掉牙的题目了,题目详情:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来. 网上流传的代码都是对5位数ABCD ...
- CDOJ ABCDE dp(前缀和优化)
题目链接: http://acm.uestc.edu.cn/#/problem/show/1307 ABCDE Time Limit: 1000/1000MS (Java/Others)Memory ...
- CDOJ 1307 ABCDE 前缀和优化dp
ABCDE 题目连接: http://acm.uestc.edu.cn/#/problem/show/1307 Description Binary-coded decimal (BCD) is a ...
- Codeforces Round #261 (Div. 2)[ABCDE]
Codeforces Round #261 (Div. 2)[ABCDE] ACM 题目地址:Codeforces Round #261 (Div. 2) A - Pashmak and Garden ...
- 一个五位数ABCDE乘以9,得到EDCBA,求此五位数
此题是面试时某面试官突然抛出的,要求逻辑分析推导,不许编码,5分钟时间算出来最终结果,当然,最终没有完全推算出来 下面是编码实现 #一个五位数ABCDE*9=EDCBA,求此数 for a in ra ...
- ABCDE
ABCDE A-Artificial intelligence 人工智能 B-Block chain 区块链 C-Cloud 云 D-Big Data 大数据 E-Ecology 互联网生态是以互联网 ...
- 第12章、乐活人生的ABCDE
目录 第12章.乐活人生的ABCDE 什么时候该乐观 让自己乐观的ABC 确认ABC 你的ABC记录 反驳和转移注意 转移注意 反驳 保持距离 学习与自己争辩 证据 其他可能性 暗示 用处 你的反驳记 ...
- 埃利斯(A.Ellis)ABCDE情绪管理理论
埃利斯(A.Ellis)ABCDE情绪管理理论A :Activating Events(诱发事件)B :Beliefs(个体对诱发事件的评价.解释.看法)C :Consequences(个体情绪和行为 ...
- 聪明的暴力枚举求abcde/fghij=n
目录 前言 一.题目 二.暴力初解 三.优化再解(借鉴bitmap) 总结 前言 枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的 ...
随机推荐
- 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 ...
- POJ题目分类推荐 (很好很有层次感)
著名题单,最初来源不详.直接来源:http://blog.csdn.net/a1dark/article/details/11714009 OJ上的一些水题(可用来练手和增加自信) (POJ 3299 ...
- Linux架设DDNS服务器之自动更新脚本
问题描述:客户端是动态IP,每次连网之后要nsupdate下才可以把客户端的hostname 与IP映射更新到DNS Server上 命令如下: nsupdate -k K*****.key > ...
- Android Studio -导入项目 gradle处理
如果导入 android studio 项目, 那么一定要注意 需要合适的gradle版本,具体方法为: 首先导入步骤: 打开android studio ==> File ==> New ...
- Java容器深入浅出之数组
写在前面 关于Java的学习,特别是对于非计算机专业的同学来说,我总是主张从实践中来,到实践中去的学习方法.Java本身是一门应用性特别强的高级编程语言,因此如果能在基于实际开发的经验基础上,对Jav ...
- 【Linux笔记】阿里云服务器被暴力破解
一.关于暴力破解 前几天新购进了一台阿里云服务器,使用过程中时常会收到“主机被暴力破解”的警告,警告信息如下: 云盾用户您好!您的主机:... 正在被暴力破解,系统已自动启动破解保护.详情请登录htt ...
- MVC 中创建自己的异常处理
1.新建类一个类继承 HandleErrorAttribute 类把异常书写到队列中 public class MyExceptionAttribute: HandleErrorAttribute { ...
- 第92天:CSS3中颜色和文本属性
一.颜色的表示方式 1. rgba(255,0,0,0.1) rgba是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha透明度.虽然它有的时候被描述为一个颜色空间 新增了RGB ...
- java学习4-Maven的发布war并部署到tomcat
1.点击生成-->Build Artifacts ,具体下图下图 2.生成完后会在target下出现一个war文件 3.部署到tomcat 复制war文件到tomcat/webapps,重启to ...
- 【BZOJ3771】Triple(生成函数,多项式运算)
[BZOJ3771]Triple(生成函数,多项式运算) 题面 有\(n\)个价值\(w\)不同的物品 可以任意选择\(1,2,3\)个组合在一起 输出能够组成的所有价值以及方案数. \(n,w< ...