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}\)向上取整. 解题 ...
随机推荐
- 5.Python的语言特点
前言 Python有哪些语言特点?可以列出的特点很多,例如,<Python核心编程>第二版列出了十多条特点.本文的三个特点是笔者学习Python的体会,其他特点有体会之后再写,笔者是这 ...
- ffplay使用笔记
ffplay播放yuv文件命令: ffplay -f rawvideo -video_size 1920x1080 a.yuv ffplay播放mp4.h.264.hevc文件命令: ffplay ...
- R语言学习笔记(九):fivenum()与quantile()
fivenum() fivenum(x, na.rm = TRUE) x 为数值型向量,可以包含NA以及Inf,-Inf na.rm = TRUE 默认将NA和NaN去除,但是Inf还保留. five ...
- app:showAsAction 和android:showAsAction
app:showAsAction 它有三个可选项1.always:总是显示在界面上2.never:不显示在界面上,只让出现在右边的三个点中3.ifRoom:如果有位置才显示,不然就出现在右边的三个点中 ...
- Delphi中客户端获取数据库更新信息(更新条数)
1.SQL语句 from tb where xxx='XXX') //不存在,则插入数据 begin insert into tb(xxx) values('XXX') //这里自己定义,插入或更新都 ...
- mysql 5.7.19 zip版本 windows安装步骤
请注意此文档用于msyql5.7系列及以后版本(包括最新 mysql 8.0.11)zip版本windows下的安装1.下载mysql省略2.解压mysql到D:\Program Files\mysq ...
- android中的文件(图片)上传
android中的文件(图片)上传其实没什么复杂的,主要是对 multipart/form-data 协议要有所了解. 关于 multipart/form-data 协议,在 RFC文档中有详细的描述 ...
- CSS属性,可以完成99%的页面编写
border: border:4px dotted red; 宽度 样式 颜色 solid(实线) border-style: -none: ...
- ByteArrayInputStream/ByteArrayOutputStream 学习
ByteArrayInputStream: byte[] buff = new byte[1024]; ByteArrayInputStream bAIM = new ByteArrayInputSt ...
- Chromium之各国语言切换
在\src\build\Debug\locales\目录下存放着各国语言所需要的资源文件xx.pak,我这边共有53中语言支持. 命令行进入src\build\Debug目录,敲:chrome.exe ...