Educational Codeforces Round 59 (Rated for Div. 2) DE题解
| Educational Codeforces Round 59 (Rated for Div. 2) |
|---|
D. Compression
题目链接:https://codeforces.com/contest/1107/problem/D
题意:
给出一个n*(n/4)的矩阵,这个矩阵原本是一些01矩阵,但是现在四个四个储存进二进制里面,现在给出的矩阵为0~9以及A~F,表示0~15。
然后问这个矩阵能否压缩为一个(n/x)*(n/x)的矩阵,满足原矩阵中大小为x*x的子矩阵所有数都相等(所有子矩阵构成整个原矩阵)。
题解:
我想的就是暴力,但题解似乎也是暴力,但题解的做法比我的做法要优美许多。我说说我的吧...
就是先看看横排能否压缩,找出所有能够压缩的v值,然后将v从大到小进行枚举,来看看列能否照样压缩,能就直接输出答案。
大体思路就是这样,但我写的代码比较复杂...其实对于将字符解码为二进制,用个二维数组就可以了...
题解的暴力就是直接几层循环枚举完事。
下面给出我的代码...
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
int n;
char s[N][N];
vector <int> vec;
int main(){
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%s",s[i]);
for(int i=;i<=n;i++){
int flag=;
if(n%i!=) continue ;
for(int j=;j<n;j++){
if(strcmp(s[(j/i)*i],s[j])!=){
flag=;
break ;
}
}
if(flag) vec.push_back(i);
}
reverse(vec.begin(),vec.end());
int flag;
for(auto v:vec){
flag=;
for(int i=;i<n;i+=v){
vector <int> a;
for(int j=;j<n/;j++){
char c = s[i][j];
int now;
if(c>='A' && c<='F') now=c-'A'+;
else now=c-'';
for(int k=;k>=;k--){
if((<<k)&now) a.push_back();
else a.push_back();
}
}
for(int k=;k<n;k++){
if(a[(k/v)*v]-''!=a[k]-''){
flag=;
break ;
}
}
if(!flag) break ;
}
if(flag){
cout<<v;
return ;
}
}
return ;
}
E. Vasya and Binary String
题目链接:https://codeforces.com/contest/1107/problem/E
题意:
给出一个01串,然后对这个串进行压缩,将长度为1,2....n的相同字符进行压缩会得到相应的权值。问怎样压缩可以得到最大的值。
题解:
这题考虑dp,因为压缩只有两种情况,要么压缩一个,要么压缩多个,这个压缩多个可以连续,也可以中间有间隔。
dp(i,j,k)表示起点为i,终点为j,压缩k个和si相同的字符所得到的最大代价。
转移的话就有两种:
1.dp(i,j,1)=max{dp(i+1,j,p)}+a[1];
2.dp(i,j,k)=max{dp(i+1,pos-1,p)}+dp(pos,j,k-1)-ak-1+ak.
这里面的max我是直接枚举得到最大值,然后dp的过程中枚举pos来进行转移。
详细见代码吧:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = ;
ll a[N];
ll dp[N][N][N];
char s[N];
int n;
int main(){
scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++) cin>>a[i];
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) dp[i][i][]=a[];
for(int i=n-;i>=;i--){
for(int j=i+;j<=n;j++){
for(int k=;k<=j-i;k++)
dp[i][j][]=max(dp[i][j][],dp[i+][j][k]+a[]);
for(int q=i+;q<=j;q++){
ll tmp=;
if(s[q]!=s[i]) continue ;
for(int p=;p<=q-i-;p++) tmp=max(tmp,dp[i+][q-][p]);
for(int k=;k<=j-i+;k++){
if(dp[q][j][k-]) dp[i][j][k]=max(dp[i][j][k],tmp+dp[q][j][k-]-a[k-]+a[k]);
}
}
}
}
ll ans = ;
for(int i=;i<=n;i++) ans=max(ans,dp[][n][i]);
cout<<ans;
return ;
}
Educational Codeforces Round 59 (Rated for Div. 2) DE题解的更多相关文章
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...
- Educational Codeforces Round 59 (Rated for Div. 2) E 区间dp + 状态定义 + dp预处理(分步dp)
https://codeforces.com/contest/1107/problem/E 题意 给出01字符串s(n<=100),相邻且相同的字符可以同时消去,一次性消去i个字符的分数是\(a ...
- C. Brutality Educational Codeforces Round 59 (Rated for Div. 2) 贪心+思维
C. Brutality time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Educational Codeforces Round 59 (Rated for Div. 2)
熬夜爆肝,智商急剧下降 坐标UTC+8晚上23:35开始 晚上脑袋转的慢,非常慢 T1上来先做还花了好几分钟 T2本来是有式子的我TM写数位DP写炸了然后才发现是有公式 T3英语不好,一开始题意没读懂 ...
- 【考试记录】Educational Codeforces Round 59 (Rated for Div. 2)
本来准备划水,结果被垃圾题艹翻了…… T2题意: 定义一个数$x$的数字根$S(x)$为:将其各位数字相加得到一个新数,再将新数的数字和相加直到得到一个个位数,就是该数的数字根. 例如:$S(38)= ...
- Educational Codeforces Round 59 (Rated for Div. 2) (前四题)
A. Digits Sequence Dividing(英文速读) 练习英语速读的题,我还上来昏迷一次....只要长度大于2那么一定可以等于2那么前面大于后面就行其他no 大于2的时候分成前面1个剩下 ...
- Educational Codeforces Round 57 (Rated for Div. 2) ABCDEF题解
题目总链接:https://codeforces.com/contest/1096 A. Find Divisible 题意: 给出l,r,在[l,r]里面找两个数x,y,使得y%x==0,保证有解. ...
- Educational Codeforces Round 54 (Rated for Div. 2) DE
D 给出一个无向图,需要删去一些边,想知道最后能有多少个点到1的距离还是过去那么短 如果求一个最短路,然后从删边的角度看,看起来很难做,但是如果从零开始加边就会有做法,如同prim那样,先加入和1直接 ...
- Educational Codeforces Round 80 (Rated for Div. 2)部分题解
A. Deadline 题目链接 题目大意 给你\(n,d\)两个数,问是否存在\(x\)使得\(x+\frac{d}{x+1}\leq n\),其中\(\frac{d}{x+1}\)向上取整. 解题 ...
随机推荐
- unity独立游戏开发日志2018/09/22
f::很头痛之前rm做的游戏在新电脑工程打不开了...只能另起炉灶... 还不知道新游戏叫什么名...暂且叫方块世界.(素材已经授权) 首先是规划下场景和素材文件夹的建立. unity常用的文件夹有: ...
- go学习笔记-基础类型
基础类型 布尔值 布尔值的类型为bool,值是true或false,默认为false. //示例代码 var isActive bool // 全局变量声明 var enabled, disabled ...
- 汇编实验15:安装新的int 9中断例程
汇编实验15:安装新的int 9中断例程 任务 安装一个新的int 9中断例程,功能:在DOS下,按下“A”键后,除非不在松开,一旦松开后,就显示满屏幕的“A”,其他键照常处理. 预备知识概要 这次实 ...
- 关于cookie的一些学习笔记
0x00 发现自己对一些原理性的东西实在是太不了解 最近看了<cookie之困>记一下笔记 0x01 因为http是无状态的 所以需要cookie和session来保持http的会话状态和 ...
- Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory
在hue上配置Mysql的时候,出现的错误: 发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open sha ...
- springmvc常用jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans ...
- 使用vue和web3创建你的第一个以太坊APP
欢迎回到这个很牛的教程系列的第2部分,在教程中我们亲手构建我们的第一个分布式应用程序. 在第二部分中,我们将介绍VueJS和Vuex的核心概念,并引入web3js以与metamask进行交互. 如果你 ...
- Flask 学习笔记(一)
一.Web 服务器与 Web 框架 首先明确一下,要运行一个动态网页,我们需要 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web ...
- 【转】H5 - HTML5新增标签
下面分别是传统的div+css的页面布局方式 下面是HTML5布局方式: 是不是精简了很多呢 现在来说说图片中出现的标签: 结构标签:(块状元素) 有意义的div artical 标记定义一篇文章 ...
- 【翻译】ASP.NET Core 文档目录
微软官方CORE 2.0正式版中文文档已经出来了,地址:https://docs.microsoft.com/zh-cn/aspnet/core/ 简介 入门 创建一个Web应用程序 创建一个Web ...