Codeforces 909 substr用法 思维合并线段目标最少 Py语句逆推DP vecrtor缩点删不同颜色点模拟 拓扑排序处理任务
A
str.substr(i,j) 从str[i]开始起取j个字符作为返回的字符串
/* Huyyt */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
string a, b;
cin >> a >> b;
string ans = "zzzzzzzzzzzzzzzzzzzzzzzzzz";
string now;
for (int i = ; i <= a.size(); i++)
{
for (int j = ; j <= b.size(); j++)
{
now = a.substr(, i) + b.substr(, j);
ans = min(now, ans);
}
}
cout << ans << endl;
return ;
}
B
解:
观察到只有当一个地方重复的时候两个线段无法合并
所以有个结论就是最终合并完后的线段数是无法合并数量最多的长度为1的线段数
/* Huyyt */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int visit[];
int main()
{
int n;
cin >> n;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n - i + ; j++)
{
for (int k = j; k <= j + i - ; k++)
{
visit[k]++;
}
}
}
int anser = ;
for (int i = ; i <= n; i++)
{
anser = max(anser, visit[i]);
}
cout << anser << endl;
return ;
}
C
S表示一个一般语句 F表示一个循环 循环体内不能为空
问你最后能有几个合法的程序
解:
①dp[i][j]表示到第i个字母该字母在第j层的方案数(层数即for循环的层数)
1.当前面一个操作是for循环时 因为for循环不能为空 所以当前操作必须加在前面一个for循环的后面
2.当前面一个操作是s时 不管后续操作是f还是s最高层数都不会变(即加s或者加f都与前一个s在同一个for循环中)
但是假设你当前加的是第X层 你可以加的地方就是X到最高层的所有方案数之和 所以倒着推.
最后答案就是第n个操作在第1-n层方案数之和 注意当最后一个操作是f时是不合法的 答案为0
/* Huyyt */
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
using namespace std;
typedef long long ll;
const long long mod = 1e9 + ;
const int maxn = ;
int n, f;
char op[maxn][];
ll dp[maxn][maxn];
int main()
{
scanf("%d", &n);
for (int i = ; i <= n; i ++)
{
scanf("%s", op[i]);
}
dp[][] = ;
for (int i = ; i <= n; i ++)
{
if (op[i - ][] == 'f')
{
for (int j = ; j <= i - ; j ++)
{
dp[i][j + ] = dp[i - ][j];
}
}
else
{
ll sum = ;
for (int j = i - ; j >= ; j --)
{
sum = (sum + dp[i - ][j]) % mod;
dp[i][j] = sum;
}
}
}
ll ans = ;
if (op[n][] == 'f')
{
ans = ;
}
else
{
for (int j = ; j <= n; j ++)
{
ans = (ans + dp[n][j]) % mod;
}
cout << ans << endl;
}
return ;
}
D
给你一条直线 直线上有N个点 每个点有一个小写字母表示它的颜色 每次操作你可以任选几个邻居颜色与自身不同的点将他们删掉
问你最少需要几次操作使得最终得到点集不能进行操作
N<=1E6
解:
剩下的点集不能进行操作有两种情况 ①集合为空 ②集合不为空且集合中的字母全部一样
所以题目就转变成问你最少多少次操作能使得点全部删完或者剩下的点颜色全部一样
继续观察可以知道 当有连续的一段相同字母 我们最多只能删掉这连续一段两端的两个
所以缩点 每次让左边界与右边界的size-1 其他的size-min(size,2) 每删完一次后去除掉size为0的即可
/* Huyyt */
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mkp(a,b) make_pair(a,b)
#define pb push_back
using namespace std;
typedef long long ll;
const long long mod = 1e9 + ;
int len;
vector<pair<int, int> > v;
int num[];
int main()
{
string now;
cin >> now;
len = now.size();
for (int i = ; i < len; i++)
{
num[i] = now[i] - 'a';
}
for (int i = ; i < len; i++)
{
if (!v.size())
{
v.push_back(mkp(num[i], ));
}
else
{
if (v[v.size() - ].first == num[i])
{
v[v.size() - ].second++;
}
else
{
v.push_back(mkp(num[i], ));
}
}
}
int anser = ;
while (v.size() > )
{
anser++;
vector<pair<int, int> > cnt;
for (int i = ; i < v.size(); i++)
{
if (i == || i == v.size() - )
{
v[i].second--;
}
else
{
v[i].second -= ;
}
}
for (auto it : v)
{
if (it.second <= )
{
continue;
}
else
{
if (cnt.empty())
{
cnt.push_back(it);
}
else if (it.first == cnt[cnt.size() - ].first)
{
cnt[cnt.size() - ].second += it.second;
}
else
{
cnt.push_back(it);
}
}
}
v = cnt;
}
cout << anser << endl;
return ;
}
E
Codeforces 909 substr用法 思维合并线段目标最少 Py语句逆推DP vecrtor缩点删不同颜色点模拟 拓扑排序处理任务的更多相关文章
- CodeForces - 666E: Forensic Examination (广义SAM 线段树合并)
题意:给定字符串S,然后M个字符串T.Q次询问,每次给出(L,R,l,r),问S[l,r]在L到R这些T字符串中,在哪个串出现最多,以及次数. 思路:把所有串建立SAM,然后可以通过倍增走到[l,r] ...
- [C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)
本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EXE,因此,需要下载以下工具: https://www.micro ...
- ILMerge将源DLL合并到目标EXE
ILMerge将源DLL合并到目标EXE(.NET4.6.2) 本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EX ...
- 使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)
本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EXE,因此,需要下载以下工具: https://www.micro ...
- [Codeforces 280D]k-Maximum Subsequence Sum(线段树)
[Codeforces 280D]k-Maximum Subsequence Sum(线段树) 题面 给出一个序列,序列里面的数有正有负,有两种操作 1.单点修改 2.区间查询,在区间中选出至多k个不 ...
- [C#]使用Costura.Fody将源DLL合并到目标EXE
本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...
- 使用Costura.Fody将源DLL合并到目标EXE
本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...
- [Codeforces 266E]More Queries to Array...(线段树+二项式定理)
[Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...
- codeforces 1217E E. Sum Queries? (线段树
codeforces 1217E E. Sum Queries? (线段树 传送门:https://codeforces.com/contest/1217/problem/E 题意: n个数,m次询问 ...
随机推荐
- 使用Android自带的资源
Android自带的资源文件有 :https://developer.android.google.cn/reference/android/R.html 代码中使用如下: 1.查看源代码的资源文件 ...
- golang入门案例之http client请求
发请求,接收接送,并解析 package main import ( "fmt" "net/http" "io/ioutil" " ...
- 如何修改eclipse中的maven的仓库地址
最近的有一个朋友问我如何修改eclipse的maven的本地仓库,我想了一下,这个玩意一般是不用修改的,主要是你本地安装的maven在哪个位置,一般的本地仓库位置在 C:\Users\username ...
- 老白关于rac性能调优的建议
RAC应用设计方面需要在底层做很有设计.虽然ORACLE的售前人员总是说RAC的扩展性是透明的,只要把应用分到不同的节点,就可以平滑的扩展系统能力了.而事实上,RAC的CACHE FUSION机制决定 ...
- 简单通讯聊天 群聊功能 Windows下的客户端 Linux下的epoll服务器
1 服务器代码 Linux eclipse C++ //======================================================================= ...
- P3611 【[USACO17JAN]Cow Dance Show奶牛舞蹈】
想了一下还是不发以前做过的水题了,意义也不是很大,现在的话大概只有洛谷黄题以上才会收录了哦~~~ 喵了个咪的题面~~ 洛谷题解dalao不是P党就是优先队列,看的我作为一个新手蒟蒻好慌啊... 这题用 ...
- mysql注入常用函数
system_user() 系统函数名 user() 用户名 current_user() 当前用户名 session_user() 连接数据库的用户名 database() 数据 ...
- v-if 和v-show的区别
在切换 v-if 块时,Vue.js 有一个局部编译/卸载过程,因为 v-if 之中的模板也可能包括数据绑定或子组件.v-if 是真实的条件渲染,因为它会确保条件块在切换当中合适地销毁与重建条件块内的 ...
- IntelliJ IDEA将导入的项目转成maven项目
今天导入公司的maven项目,发现结构不对劲,难怪说为啥一直不能部署tomcat,后面百度才了解到导入这个项目还不是maven项目,首先需要把这个项目变成maven项目,然后再进行tomcat的部署下 ...
- vue--生命周期演示
vue实例的生命周期:https://cn.vuejs.org/v2/guide/instance.html#%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA-Vue-%E5% ...