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) 总结 前言 枚举如何聪明的枚举?那就是优化啦!下面梳理之前做过的一个暴力枚举的题,想了蛮久最后把它优化了感觉还不错,算是比较聪明的 ...
随机推荐
- 各团队对《t铁大导航》评价及我组回复
组名 对我们组的建议 我组回复 (1)跑男 你们的导航前期要做到什么样的程度呢?其实我一直是很期待你们完成时我能够用你们的导航来感受一下咱们铁大校园风情.你们用了数据结构算法来找最短路径,那你们能不能 ...
- 2018软工实践—Alpha冲刺(2)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助前端界面的开发 搭建测试用服务器的环境 完成 ...
- lintcode-389-判断数独是否合法
389-判断数独是否合法 请判定一个数独是否有效. 该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 注意事项 一个合法的数独(仅部分填充)并不一定是可解的.我们仅需使填充的空格有效即可. 说 ...
- IT就业·软件工程之我见
随着计算机技术的飞速发展,让人们深切感受到科技让生活更美好的真正含义. 现如今我们的正常生活,社交都越来越离不开网络和终端,因特网和各种终端设备的组合让我们即使相距千里,也能面对面对话交流:购物,我们 ...
- CentOS安装crontab及使用方法(转)
CentOS安装crontab及使用方法(转) 安装crontab:[root@CentOS ~]# yum install vixie-cron[root@CentOS ~]# yum ins ...
- nodejs 调试
什么语言入门的准备功能就是写helloworld, 调试. 用惯了chrome的话,推荐用chrome自带的调试器来调试.很方便. 在地址栏中输入 chrome://inspect 并按回车,会打开如 ...
- pixi.js 微信小游戏 入手
pixi是什么?一款h5游戏引擎 优点:简单简洁性能第一 缺点:大多数用的国产三大引擎,pixi资料少,工具少, 为什么学,装逼 用pixi开发小游戏行吗? 行.但要简单处理下 下载官网上的 weap ...
- Java NIO:IO与NIO的区别 -阿里面试题
一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...
- Android性能测试工具:Emmagee介绍
简介 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具.该工具的优势在于如同windows系统性能监视器类似,它提供的是数据采集的功能,而行为则基于用户真实 ...
- 内存测试——Android Studio自带内存检测功能
AndroidStudio 自带 CPU 和内存检测工具,绘制出变化图,可以直观明了的看出内存和cpu的变化曲线. 手机连接电脑,选择要调试的手机,选择要检测的应用进程,Memory是内存监控,CPU ...