NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」

待补

引子

题解

大模拟,注意细节

代码1

#include<bits/stdc++.h>
using namespace std;
int n,m;char a[1005][1005];bool vst[1005][1005];
void solve(int na,int nb)
{int i=na,j=nb,now=0;while(1){j++;if(a[na][j]=='+')break;}while(1){i++;if(a[i][nb]=='+')break;}for(int k=na+1;k<i;k++){for(int l=nb+1;l<j;l++)if(a[k][l]>='0'&&a[k][l]<='9')now=now*10+a[k][l]-'0';if(now)break;}for(int k=i;k>=na;k--){if(j<=m&&a[k][j+1]=='-'){int ni=k,nj=j+1;vst[ni][nj]=1;while(1){while(1){if((a[ni][nj+1]=='-'||a[ni][nj+1]=='+')&&!vst[ni][nj+1])nj++;else nj--;vst[ni][nj]=1;if(a[ni][nj]=='+')break;}while(1){ni++;vst[ni][nj]=1;if(a[ni][nj]=='+'||a[ni][nj]=='-')break;}if(a[ni][nj]=='-')break;}while(a[ni][nj]!='+')nj--;solve(ni,nj);}else if(nb&&a[k][nb-1]=='-'){int ni=k,nj=nb-1;vst[ni][nj]=1;while(1){while(1){if((a[ni][nj+1]=='-'||a[ni][nj+1]=='+')&&!vst[ni][nj+1])nj++;else nj--;vst[ni][nj]=1;if(a[ni][nj]=='+')break;}while(1){ni++;vst[ni][nj]=1;if(a[ni][nj]=='+'||a[ni][nj]=='-')break;}if(a[ni][nj]=='-')break;}while(a[ni][nj]!='+')nj--;solve(ni,nj);}}printf("%d\n",now);
}
int main()
{bool fir=0;int sta,stb;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char c=getchar();while(c!='+'&&c!='|'&&c!='-'&&c!='.'&&(c>'9'||c<'0'))c=getchar();a[i][j]=c;if(a[i][j]=='+'&&!fir)sta=i,stb=j,fir=1;}solve(sta,stb);return 0;
}

代码2

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 1111
char ch[A][A];
ll n,m,top=0;
ll h[A][A],stax[A],stay[A],low[A],len[A],sta[A];
ll chuanx,chuany;
bool vis[A][A];
struct node {ll hang,id;friend bool operator < (const node &a,const node &b){return a.hang<b.hang;}
};
priority_queue <node> high[A];
const ll nowx[5]={0,1,-1,0,0};
const ll nowy[5]={0,0,0,1,-1};
//1右0左2下
void pre(ll x,ll y,ll fx){if(h[x][y]){
//        printf("x=%lld y=%lld h=%lld fx=%lld\n",x,y,h[x][y],fx);chuanx=x,chuany=y;return ;}if(ch[x][y]=='+'){if(fx==0||fx==1){pre(x+1,y,2);}if(fx==2){if(ch[x][y+1]=='-')pre(x,y+1,1);if(ch[x][y-1]=='-')pre(x,y-1,0);}}else{if(fx==1&&y+1<=m)pre(x,y+1,1);if(fx==0&&y-1>=1)pre(x,y-1,0);if(fx==2&&x+1<=n)pre(x+1,y,2);}
}
void dfs(ll num){while(!high[num].empty()){ll x=high[num].top().id;
//        printf("hang=%lld\n",high[num].top().hang);
        high[num].pop();dfs(x);}low[++low[0]]=num;
}
void del(ll x,ll y,ll num){top=1;
//    printf("num=%lld\n",num);stax[top]=x,stay[top]=y;while(top){ll x=stax[top],y=stay[top];h[x][y]=num;top--;for(ll i=1;i<=4;i++){ll x2=x+nowx[i],y2=y+nowy[i];h[x2][y2]=num;
//            printf("x2=%lld y2=%lld\n",x2,y2);if((ch[x2][y2]=='.'||isdigit(ch[x2][y2]))&&!vis[x2][y2]){top++;stax[top]=x2,stay[top]=y2;vis[x2][y2]=1;}}}
//    printf("*********************%lld\n",h[14][61]);
}
void bfs(){for(ll i=1;i<=n;i++)for(ll j=1;j<=m;j++){if(isdigit(ch[i][j])){
//                printf("ch[%lld][%lld]=%d\n",i,j,ch[i][j]-'0');ll x=ch[i][j]-'0';for(ll w=j+1;w<=m;w++){if(isdigit(ch[i][w]))x=x*10+ch[i][w]-'0';else break;}
//                printf("x1=%lld x2=%lld x3=%lld\n",x,x2,x3);if(!vis[i][j])del(i,j,x);}}
/*    for(ll i=1;i<=n;i++,puts(""))for(ll j=1;j<=m;j++){printf("%lld",h[i][j]);}
*/    for(ll i=1;i<=n;i++)for(ll j=1;j<=m;j++){if(ch[i][j]=='|'){if(ch[i][j+1]=='-'){pre(i,j+1,1);node no;
//                    printf("i=%lld j=%lld h=%lld chan=%lld %lld h=%lld\n",i,j,h[i][j],chuanx,chuany,h[chuanx][chuany]);no.hang=i,no.id=h[chuanx][chuany];high[h[i][j]].push(no);}if(ch[i][j-1]=='-'){pre(i,j-1,0);node no;
//                    printf("i=%lld j=%lld h=%lld chan=%lld %lld h=%lld\n",i,j,h[i][j],chuanx,chuany,h[chuanx][chuany]);no.hang=i,no.id=h[chuanx][chuany];high[h[i][j]].push(no);}}}dfs(1);for(ll i=1;i<=low[0];i++){printf("%lld\n",low[i]);}
}int main(){
//    freopen("wos.txt","w",stdout);scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++){scanf("%s",ch[i]+1);}bfs();
}

可爱宝贝精灵

题解

一个不错的dfs题(还能练习剪枝)

一个不错的dp题

思考dp数组含义

首先我们知道我们到一个有小精灵地方就必须抓住它(显然)而不是来回逛几圈再次经过它再抓

然后我们只要从一个方向走就必须抓住至少一只小精灵,转向之后也至少抓住一只精灵,(否则你走这一段就是没用的)

$i,j$分别表示当前最左到$i$最右到$j$时的最大值

设$f[i][j]$肯定不行时间难以确认,多一维表示时间$f[t][i][j]$也难以确定,然而你在左面还是右面依然难以确定

那么再加一维$f[t][i][j][2]$中$[1]$表示在右面,$[0]$表示在左面

转移很好转移,不像昨天那个傻逼t2式子

类似离散化一下

假如当前l,你可以走到r或者l-1

假如当前r,你可以走到l或者r+1

用式子表示就是

从$r$走到$l+1$再走到$l$

从$l$走到$r-1$再走到$r$

$f[i][l][r][0]=max(f[max(i-dis(l,l+1),0)][l+1][r][0],f[max(i-dis(l,r),0)][l+1][r][1])+Val;$
$f[i][l][r][1]=max(f[max(i-dis(r-1,r),0)][l][r-1][1],f[max(i-dis(l,r),0)][l][r-1][0])+Val;$

注意一下初始化!

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define py printf("tys is sb\n")
#define A 2010
ll f[A][118][118][2];
struct pocky{ll pla,val,tim;friend bool operator < (const pocky &a, const pocky &b){return a.pla<b.pla;}
}texas[A];
ll dis(ll l,ll r){return abs(texas[r].pla-texas[l].pla);
}
ll n,k,m,mx,mid,ans;
void debuger(ll x){for(ll i=1;i<=m;i++,puts(""))for(ll j=i+1;j<=m;j++){printf("f[%lld][%lld][%lld]=%lld %lld\n ",x,i,j,f[x][i][j][1],f[x][i][j][0]);}
}
int main(){scanf("%lld%lld%lld",&n,&k,&m);for(ll i=1;i<=m;i++){scanf("%lld%lld%lld",&texas[i].pla,&texas[i].val,&texas[i].tim);mx=max(mx,texas[i].tim);}memset(f,-0x3f,sizeof(f));m++;texas[m].pla=k,texas[m].val=0,texas[m].tim=mx;sort(texas+1,texas+m+1);for(ll i=1;i<=m;i++){if(texas[i].pla==k&&texas[i].val==0){mid=i;break;}}f[0][mid][mid][0]=0;f[0][mid][mid][1]=0;
//    printf("mid=%lld \n",texas[mid].pla);for(ll i=mid-1;i>=1;i--){ll tim=texas[mid].pla-texas[i].pla;
//        printf("tim=%lld i=%lld mid=%lld \n",tim,i,mid);f[tim][i][mid][0]=f[dis(mid,i+1)][i+1][mid][0]+((tim<texas[i].tim)?texas[i].val:0);ans=max(ans,f[tim][i][mid][0]);}for(ll i=mid+1;i<=m;i++){ll tim=texas[i].pla-texas[mid].pla;f[tim][mid][i][1]=f[dis(mid,i-1)][mid][i-1][1]+((tim<texas[i].tim)?texas[i].val:0);ans=max(ans,f[tim][mid][i][1]);}
//    printf("ans=%lld\n",ans);for(ll i=1;i<=mx;i++)for(ll l=1;l<=mid-1;l++)for(ll r=mid+1;r<=m;r++){f[i][l][r][0]=max(f[max(i-dis(l,l+1),0ll)][l+1][r][0],f[max(i-dis(l,r),0ll)][l+1][r][1])+((i<texas[l].tim)?texas[l].val:0);f[i][l][r][1]=max(f[max(i-dis(r-1,r),0ll)][l][r-1][1],f[max(i-dis(l,r),0ll)][l][r-1][0])+((i<texas[r].tim)?texas[r].val:0);ans=max(ans,max(f[i][l][r][0],f[i][l][r][1]));
//                printf("    f[%lld][%lld][%lld][0]=%lld [%lld][%lld][%lld][1]=%lld\n",i,l,r,f[i][l][r][0],i,l,r,f[i][l][r][1]);
            }printf("%lld\n",ans);
}

 相互在归的鹅妈妈

转载于:https://www.cnblogs.com/znsbc-13/p/11340743.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GC解释:收集器概述

当前版本的HotSpot JVM包括三种类型的垃圾收集器&#xff1a; –串行收集器 –并行收集器 –多数同时收集者 它们都是世代的&#xff0c;这意味着它们利用了堆的划分方式 。 垃圾收集器负责三个主要操作&#xff1a; –查找不再使用的对象 –释放这些对象之后的内存 –…

数据结构之排序五:选择排序

def selectedSort(myList):#获取list的长度length len(myList)#一共进行多少轮比较for i in range(0,length-1):#默认设置最小值得index为当前值smallest i#用当先最小index的值分别与后面的值进行比较,以便获取最小indexfor j in range(i1,length):#如果找到比当前值小的ind…

C#代码规范

1. 引言 本文是一套面向C# programmer 和C# developer 进行开发所应遵循的开发规范。 按照此规范来开发C#程序可带来以下益处&#xff1a; 代码的编写保持一致性&#xff0c; 提高代码的可读性和可维护性&#xff0c; 在团队开发一个项目的情况下&a…

谷歌guava_使用Google Guava进行馆藏创建和不变性

谷歌guava因此&#xff0c;我想看看番石榴提供的一些集合创建模式&#xff0c;以及它提供的某些不可变集合类型。 如果您没有看过我以前的文章&#xff0c;则可能要从这里开始&#xff1a; 番石榴第1部分– MultiMaps 番石榴第2部分– BiMaps 番石榴第3部分–多组 Guava的…

问题 1051: [编程入门]结构体之成绩统计2

题目描述有N个学生&#xff0c;每个学生的数据包括学号、姓名、3门课的成绩&#xff0c;从键盘输入N个学生的数据&#xff0c;要求打印出3门课的总平均成绩&#xff0c;以及最高分的学生的数据&#xff08;包括学号、姓名、3门课成绩&#xff09;输入学生数量N占一行每个学生的…

socket-02

# -- coding: utf-8 --_author__ "HuaQiang Yan" import socketdef handle_request(client):buf client.recv(1024) # 接收请求client.send(bytes("HTTP/1.1 200 OK\r\n\r\n", encodingutf-8))client.send(bytes("Hello World&#xff01;", …

jenkins复制作业_Jenkins分层作业和作业状态汇总

jenkins复制作业您可能知道&#xff0c;Jenkins是高度可配置的CI服务器。 我们可以设置不同的自定义构建过程。 我将分享一些我用来设置詹金斯工作层次的方法。 这是用例&#xff1a; 我们有一个主要的入口工作被调用以启动整个构建过程。 这项工作可以有一个到多个子工作。 …

xaml语言建立首个win8 Metro应用,rss阅读器

本实例是来源msdn的Metro开发文档&#xff0c;按着解说一步步来理解的&#xff0c;修改了一点点&#xff0c;拿了博客园本人的博客作为RSS阅读&#xff0c;本实例用来学习还是可以的 参考文档http://msdn.microsoft.com/zh-cn/library/windows/apps/br211380.aspx#Y909 先看允…

在扩展Spock时输出给定值

Spock是一个Java测试框架&#xff0c;由GradleWare的软件工程师Peter Niederwieser于2008年创建&#xff0c;它可以促进BDD的发展。 利用这个 例如 &#xff0c;一个故事可以定义为&#xff1a; Story: Returns go to stockAs a store owner In order to keep track of stock…

wsgi

wsgi&#xff0c;通用网关接口。相当于在app与web服务&#xff08;socket服务端&#xff09;之间建立统一连接的规范。 真实开发中的python web程序来说&#xff0c;一般会分为两部分&#xff1a;服务器程序和应用程序。服务器程序负责对socket服务器进行封装&#xff0c;并在请…

Java与Python:哪一种最适合您? [信息图]

通过从应用程序中学习企业APM产品&#xff0c;发现更快&#xff0c;更高效的性能监控。 参加AppDynamics APM导览&#xff01; 在软件开发中&#xff0c;很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己&#xff0c;将客观事…

零基础学习java------day11------常用API

API概述 API(application Programming Interface, 应用程序编程接口)&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节 比如我需要在一个程序里面嵌入…

.net 下的集合

集合的操作在编码的时候很常见。但是由于经常使用几种集合。而忽略了一些不常用的集合。在这里我整理下。 首先先了解下接口&#xff1a; 1、IEnumerable&#xff0c;返回一个循环访问集合的枚举器。 2、IEnumerable<T>&#xff0c;返回一个循环访问指定集合T的枚举器。 …

aspects_具有Aspects的Java中的Mixin –用于Scala特性示例

aspectsScala特征允许将新行为混合到一个类中。 考虑两个特征&#xff0c;可以向JPA实体添加审核和与版本相关的字段&#xff1a; package mvcsample.domainimport javax.persistence.Version import scala.reflect.BeanProperty import java.util.Datetrait Versionable {Ver…

TCP服务端实现并发

socket 在 tcp 协议下通信 客户端 import socket ​ # 创建客户端TCP协议通信 c socket.socket() # 与指定服务端握手 c.connect((127.0.0.1, 8080)) ​ # 通信循环 while True:# 向服务端发送信息msg input(>>>)if len(msg) 0:continuec.send(msg.encode(utf-8))#…

问题 1052: [编程入门]链表合并

题目描述已有a、b两个链表&#xff0c;每个链表中的结点包括学号、成绩。要求把两个链表合并&#xff0c;按学号升序排列。 输入第一行&#xff0c;a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成 输出按照学号…

ssh 看apache_使用Apache KeyedObjectPool的ssh连接池

ssh 看apache我发现org.apache.commons.pool非常有用且健壮&#xff0c;但没有充分记录。 因此&#xff0c;我将在这里帮助您解释如何使用Apache KeyedObjectPool 。 什么是KeyedObjectPool &#xff1f; 它是一个映射&#xff0c;其中包含多种类型的实例池。 可以使用任意键访…

问题 1066: 2004年秋浙江省计算机等级考试二级C 编程题(2)

题目描述输入一个正数x和一个正整数n&#xff0c;求下列算式的值。要求定义两个调用函数&#xff1a;fact(n)计算n的阶乘&#xff1b;mypow(x,n)计算x的n次幂&#xff08;即xn&#xff09;&#xff0c;两个函数的返回值类型是double。 x - x2/2! x3/3! ... (-1)n-1xn/n! 输出…

Ubuntu16.04下安装多版本cuda和cudnn

Ubuntu16.04下安装多版本cuda和cudnn 原文 https://blog.csdn.net/tunhuzhuang1836/article/details/79545625 前言因为之前针对Pytorch&#xff0c;caffe&#xff0c;torch等&#xff0c;装了cuda8.0和对应cudnn5.1&#xff0c;但是最近在装MxNet的时候&#xff0c;发现官网上…

什么是javax.ws.rs.core.context? [ 第1部分 ]

如何使用Context批注 JAX-RS API提供了一种非常方便的机制&#xff0c;可以将各种有用的资源&#xff08;例如HTTP标头&#xff09;注入到端点中。 Context注释是一个通用注释&#xff0c;它注入以下对象的实例&#xff1a; HttpHeaders- > HTTP标头参数和值 UriInfo- >…