2019 hdu多校1
A:一类线性dp,时间卡的有点紧
- /*
- 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} 这 4 个数字最后一次出现的位置,
- 排序后为 t, i, j, k(t > i > j > k) 的方案数目,则按照第 t 位的数字的四种选择,可以得
- 到四种转移。
- t选t-1这个位置的数:dp[t][i][j][k]
- t选i这个位置的数:dp[t][t-1][j][k]
- t选j这个位置的数:dp[t][t-1][i][k]
- t选k这个位置的数:dp[t][t-1][i][j]
- 枚举r[l]==t+1的所有条件,当且仅当满足所有条件时才进行转移
- 最后的方案数=sum{dp[n]}
- 总时间复杂度 O(n4)。滚动一维,空间复杂度 O(n3)
- */
- #include<bits/stdc++.h>
- using namespace std;
- #define maxn 110
- #define ll long long
- #define mod 998244353
- ll dp[][maxn][maxn][maxn];
- int n,m;
- struct Node{
- int l,x;
- Node(){}
- Node(int l,int x):l(l),x(x){}
- };
- vector<Node>v[maxn];
- inline void update(ll &a,ll b){
- a=(a+b);
- while(a>=mod)a-=mod;
- }
- int c;
- void solve(){
- c=;
- dp[c][][][]=;
- for(int t=;t<=n;t++){
- c^=;
- for(int i=;i<=t;i++)
- for(int j=;j<=i;j++)
- for(int k=;k<=j;k++)
- dp[c][i][j][k]=;
- for(int i=;i<t;i++)
- for(int j=;j<=i;j++)
- for(int k=;k<=j;k++){
- update(dp[c][i][j][k],dp[c^][i][j][k]);
- update(dp[c][t-][j][k],dp[c^][i][j][k]);
- update(dp[c][t-][i][k],dp[c^][i][j][k]);
- update(dp[c][t-][i][j],dp[c^][i][j][k]);
- }
- for(int p=;p<v[t].size();p++){//枚举每个条件
- int l=v[t][p].l,x=v[t][p].x;
- for(int i=;i<t;i++)
- for(int j=;j<=i;j++)
- for(int k=;k<=j;k++){
- int cnt=;
- if(i>=l)cnt++;
- if(j>=l)cnt++;
- if(k>=l)cnt++;
- if(cnt!=x)dp[c][i][j][k]=;
- }
- }
- }
- }
- int main(){
- //ios::sync_with_stdio(false);
- int t;cin>>t;
- while(t--){
- for(int i=;i<maxn;i++)v[i].clear();
- scanf("%d%d",&n,&m);
- for(int i=;i<=m;i++){
- int l,r,x;
- scanf("%d%d%d",&l,&r,&x);
- v[r].push_back(Node(l,x));
- }
- solve();
- ll ans=;
- for(int i=;i<n;i++)
- for(int j=;j<=i;j++)
- for(int k=;k<=j;k++)
- ans+=dp[c][i][j][k],ans%=mod;
- cout<<ans<<'\n';
- }
- }
B:线性基前缀和,cf原题
C:待补
D:模拟,二分也可以做
E:队友过得,最短路最小割
F,G,H待补
I:字符串dp,调了半天才做出来
- #include<bits/stdc++.h>
- using namespace std;
- #define maxn 300005
- int cnt[maxn][],nxt[maxn][],pos[];
- int n,k,l[],r[],used[],up,down;
- char ans[maxn],s[maxn];
- int judge(int i,int pos){
- int res1=,res2;
- for(int j=;j<;j++){
- if(used[j]+cnt[pos][j] < l[j])return ;
- res1+=max(,l[j]-used[j]);//后面最少要的字符个数
- res2+=min(cnt[pos][j],r[j]-used[j]);//后面最多能的字符个数
- }
- if(res1>k-i || res2<k-i)return ;
- return ;
- }
- void init(){
- memset(used,,sizeof used);
- up=down=;
- memset(cnt,,sizeof cnt);
- memset(ans,,sizeof ans);
- }
- int main(){
- while(scanf("%s%d",s+,&k)==){
- init();
- n=strlen(s+);
- for(int i=;i<;i++)scanf("%d%d",&l[i],&r[i]),up+=r[i],down+=l[i];
- for(int i=n;i>=;i--){
- for(int j=;j<;j++)
- if(s[i]-'a'==j)cnt[i][j]=cnt[i+][j]+;
- else cnt[i][j]=cnt[i+][j];
- }
- int flag=;
- if(down>k || up<k){puts("-1");continue;}
- for(int i=;i<;i++)if(cnt[][i]<l[i]){puts("-1");flag=;break;}
- if(flag)continue;
- for(int i=;i<;i++)pos[i]=n+;
- for(int i=n;i>=;i--){
- for(int j=;j<;j++)
- nxt[i][j]=pos[j];
- pos[s[i]-'a']=i;
- }
- for(int j=;j<;j++)nxt[][j]=pos[j];
- int now=;
- for(int i=;i<=k;i++){
- for(int j=;j<;j++){//第i位选择j
- if(used[j]>=r[j])continue;
- int tmp=nxt[now][j];
- used[j]++;
- if(judge(i,tmp+)){
- ans[i]=j;
- now=tmp;
- break;
- }
- else
- used[j]--;
- }
- }
- for(int i=;i<=k;i++)cout<<(char)(ans[i]+'a');
- puts("");
- }
- }
JKLM:待补
2019 hdu多校1的更多相关文章
- 2019 HDU 多校赛第二场 HDU 6598 Harmonious Army 构造最小割模型
题意: 有n个士兵,你可以选择让它成为战士还是法师. 有m对关系,u和v 如果同时为战士那么你可以获得a的权值 如果同时为法师,你可以获得c的权值, 如果一个为战士一个是法师,你可以获得b的权值 问你 ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 2015 HDU 多校联赛 5363 Key Set
2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...
- 2015 HDU 多校联赛 5317 RGCDQ 筛法求解
2015 HDU 多校联赛 5317 RGCDQ 筛法求解 题目 http://acm.hdu.edu.cn/showproblem.php? pid=5317 本题的数据量非常大,測试样例多.数据 ...
- [HDU多校]Ridiculous Netizens
[HDU多校]Ridiculous Netizens 点分治 分成两个部分:对某一点P,连通块经过P或不经过P. 经过P采用树形依赖背包 不经过P的部分递归计算 树型依赖背包 v点必须由其父亲u点转移 ...
- 【杂题总汇】HDU多校赛第十场 Videos
[HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...
- hdu多校1002 Balanced Sequence
Balanced Sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s) ...
- HDU多校(Distinct Values)
Problem Description Chiaki has an array of n positive integers. You are told some facts about the ar ...
随机推荐
- vue ui 开启无效记录
换了台电脑,输入vue ui 无法开启图形化界面 1.首先vue ui 没成功 我找到vue.cmd路径配置到环境变量依旧没有解决 然后使用vue -h 显示没有vue ui这个命令 重新安装npm ...
- PHP-全排列
给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] ...
- nodejs express的基本用法
demo /** * Created by ZXW on 2017/11/6. */ var express=require("express"); var server=expr ...
- 用JavaScript写一个JD放大镜
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Delphi COM对象
作者:巴哈姆特 http://www.cnpack.org(转载请注明出处并保持完整) 如果没有接触过COM对象的话,你会觉得接口真的很麻烦,也许会有:“还不如直接定义一个类更方便”的想法. 的确, ...
- 【NOI2019模拟2019.6.29】字符串(SA|SAM+主席树)
Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只 ...
- PHP ftp_exec() 函数
定义和用法 ftp_exec() 函数请求在 FTP 服务器上执行一个程序或命令. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_exec(ftp_connection ...
- springboot之停止与启动服务的脚本
最近要开始自动化部署了,我们要编写杀死服务的脚本. 我在windows写好的脚本拷贝到linux,就是不行,好像是因为转义字符吧. 然后,我就手敲了这个下面脚本: pid=`ps -ef|grep / ...
- layui多图上传
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- spring--Springmvc中@Autowired注解与@Resource注解的区别
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...