
Good Bye 2016 E. New Year and Old Subsequence
发布日期:2021-05-06 23:50:39
浏览次数:24
分类:技术文章
本文共 2458 字,大约阅读时间需要 8 分钟。
题意
自己看英文
题解
左老师在KOI讲的题,没看题就听题解了QAQ
还没想过呢。。 线段树维护矩阵,好像很难啊。。 然后今天做了一下,发现也不怎么难 就线段树每个节点维护一个DP数组,表示从i状态到j状态所需的代价 0:什么都没有 1:2 2:20 3:201 4:2017 CODE:#include#include #include #include #include using namespace std;const int MAX=1<<28;const int N=200005;char ss[N];struct matrix{ int s[5][5]; matrix operator + (const matrix x) const { matrix a; for (int u=0;u<5;u++) for (int i=0;i<5;i++) { a.s[u][i]=MAX; for (int j=0;j<5;j++) { // printf("u:%d i:%d j:%d s[u][j]:%d s[j][i]:%d\n",u,i,j,s[u][j]); a.s[u][i]=min(a.s[u][i],s[u][j]+x.s[j][i]); } } return a; }};struct qq{ int l,r; int s1,s2; matrix c;}tr[N<<1];int num;void bt (int l,int r){ int a=++num; tr[a].l=l;tr[a].r=r; if (l==r) { for (int u=0;u<5;u++) for (int i=0;i<5;i++) tr[a].c.s[u][i]=(u==i)?0:MAX; if (ss[l]=='2') { tr[a].c.s[0][0]=1;tr[a].c.s[0][1]=0;} if (ss[l]=='0') { tr[a].c.s[1][1]=1;tr[a].c.s[1][2]=0;} if (ss[l]=='1') { tr[a].c.s[2][2]=1;tr[a].c.s[2][3]=0;} if (ss[l]=='7') { tr[a].c.s[3][3]=1;tr[a].c.s[3][4]=0;} if (ss[l]=='6') { tr[a].c.s[3][3]=1;tr[a].c.s[4][4]=1;} /* for (int u=0;u<4;u++) { for (int i=0;i<4;i++) printf("%d ",tr[a].c.s[u][i]); printf("\n"); }*/ return ; } int mid=(l+r)>>1; tr[a].s1=num+1;bt(l,mid); tr[a].s2=num+1;bt(mid+1,r); tr[a].c=tr[tr[a].s1].c+tr[tr[a].s2].c;/* printf("%d %d\n",l,r); for (int u=0;u<4;u++) { for (int i=0;i<4;i++) printf("%d ",tr[a].c.s[u][i]); printf("\n"); } system("pause");*/}matrix find (int now,int l,int r){/* printf("%d %d %d %d %d\n",now,tr[now].l,tr[now].r,l,r); system("pause");*/ if (tr[now].l==l&&tr[now].r==r) return tr[now].c; int s1=tr[now].s1,s2=tr[now].s2; int mid=(tr[now].l+tr[now].r)>>1; if (r<=mid) return find(s1,l,r); else if (l>mid) return find(s2,l,r); else return find(s1,l,mid)+find(s2,mid+1,r);}int main(){ int n,q; scanf("%d%d",&n,&q); scanf("%s",ss+1); bt(1,n); for (int u=1;u<=q;u++) { int l,r; scanf("%d%d",&l,&r); matrix ans=find(1,l,r); if (ans.s[0][4]==MAX) printf("-1\n"); else printf("%d\n",ans.s[0][4]); } return 0;}
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月04日 08时47分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2021年车工(高级)考试总结及车工(高级)试题及答案
2019-03-03
2021年压力焊证考试及压力焊实操考试视频
2019-03-03
2021年低压电工考试及低压电工考试申请表
2019-03-03
2021年低压电工考试及低压电工考试申请表
2019-03-03
2021年A特种设备相关管理(电梯)考试APP及A特种设备相关管理(电梯)复审考试
2019-03-03
2021年N1叉车司机考试题及N1叉车司机复审模拟考试
2019-03-03
2021年T电梯修理考试技巧及T电梯修理模拟考试软件
2019-03-03
2021年电工(初级)考试及电工(初级)证考试
2019-03-03
大数据学习之Spark——00Spark项目的pom.xml文件
2019-03-03
CodeBlocks开发wxWidgets环境配置详细
2019-03-03
天涯人脉通讯录 - 设计草图
2019-03-03
wxWidgets 最新版2.8.11,终于放出来了
2019-03-03
python学习09:暂停一秒后再输出
2019-03-03
6、ShardingSphere 之 读写分离
2019-03-03
C++ STL
2019-03-03
解方程
2019-03-03
练习赛 位运算 思维 思维
2019-03-03
Netty 粘包 拆包 | 史上最全解读
2019-03-03
【调剂】其它计算机/软件调剂信息 20.4.21
2019-03-03