NOIP2010解题报告

NOIp2010TG/Luogu P1514 引水入城 解题报告 现在开始在博客上写解题报告也是有点晚了,毕竟还有5天就是高三狗了,距离NOIp2016只有77天。博主在NOIp2015的表现十分不令人满意,于是想再最后搏一次,希望能拿上一等奖,也算是给自己的努力一个证明。 写这个解题报告一是整理自己的思路,希望让自己不要忘了这道题;二是做个记录,感觉引水入城这道题很经典,等到赛前复习的时候可以拿来看看,快速复习。 下面来看一下题目题目描述 在一个遥远的国 阅读详情

题目链接:

T1 机器翻译
T2 乌龟棋
T3 关押罪犯
T4 引水入城

题解:

一套不算太难的NOIP题目。
第一题直接暴力模拟队列的工作即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int q[10100];

int in(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x;
}

int main(){
    int m=in(),n=in();
    int h=1,t=1,s=0;
    for (int i=1; i<=n; i++){
        int x=in(); bool f=false;
        for (int j=h; j<t; j++)
            if (q[j]==x){
                f=true; break;
            }
        if (!f){
            s++,q[t++]=x;
            if (t-h>m) h++;
        }
    }
    printf("%d\n",s);
    return 0;
}

第二题我写的是 404 的dp,转移方程显然:
f[i][j][k][l]表示当前用了i张1步的,j张2步,k张3步,l张4步。
f[i][j][k][l]=max(f[i-1][j][k][l],f[i][j-1][k][l],f[i][j][k-1][l],f[i][j][k][l-1])+a[i+2×j+3×k+4×l]。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

int f[50][50][50][50]={0},a[400],b[6];

int in(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x;
}

int main(){
    int n=in(),m=in();
    for (int i=1; i<=n; i++) a[i]=in();
    for (int i=1; i<=m; i++) b[in()]++;
    for (int i=0; i<=b[1]; i++)
        for (int j=0; j<=b[2]; j++)
            for (int k=0; k<=b[3]; k++)
                for (int l=0; l<=b[4]; l++){
                    int s=0;
                    if (i) s=max(s,f[i-1][j][k][l]);
                    if (j) s=max(s,f[i][j-1][k][l]);
                    if (k) s=max(s,f[i][j][k-1][l]);
                    if (l) s=max(s,f[i][j][k][l-1]);
                    f[i][j][k][l]=a[i+j*2+k*3+l*4+1]+s;
                }
    printf("%d\n",f[b[1]][b[2]][b[3]][b[4]]);
    return 0;
}

第三题并查集,把所有的冲突按照值从大到小排序,然后每一个冲突的两端加进两个不同的集合,直到出现冲突,此时这个冲突的值就是我们最终分配完后出现的最大的那个冲突值,输出即可,如一直没有冲突,就输出0了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

struct S{
    int x,y,c;
}a[100010];
int n,nn,m,fa[40010];

int in(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x;
}

bool cmp(S a,S b){
    return a.c>b.c;
}

int find(int x){
    return fa[x]!=x?fa[x]=find(fa[x]):x;
}

int main(){
    n=in(),m=in(); nn=n<<1;
    for (int i=1; i<=nn; i++) fa[i]=i;
    for (int i=1; i<=m; i++)
        a[i].x=in(),a[i].y=in(),a[i].c=in();
    sort(a+1,a+m+1,cmp);
    for (int i=1; i<=m; i++){
        int f1=find(a[i].x),f2=find(a[i].y);
        if (f1!=f2) fa[f1]=find(a[i].y+n),fa[f2]=find(a[i].x+n);
        else {
            printf("%d\n",a[i].c);
            return 0;
        }
    }
    printf("0\n");
    return 0;
}

第四题开始想到了正常解法,后来脑抽想去搞一个最短路(来源于费用流的启发)。。于是颓了很久,后来还是写了正常的做法。。写完后去看了一下题解,发现好像真的可以跑最短路(囧。。)
说一下正常做法:
首先把第一行入队,bfs一遍,看最后一行是否全都能访问到,不能就直接输出0和不能访问的个数,否则就重新对于第一行的每个点dfs(bfs一样。。懒的写两遍了。。)一遍,然后统计一下它能访问到的最后一行的区间(这个一定是连续的,可以证明。。但我是脑补出来的。。),然后就是经典线段覆盖的dp了。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 1001000
#define M 600

struct Q{
    int x,y;
}q[N];
struct E{
    int l,r;
}e[M];
int dx[6]={0,0,-1,1},dy[6]={-1,1,0,0};
int n,m,f[M],a[M][M]; bool vis[M][M];

int in(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x;
}

void bfs(){
    memset(vis,0,sizeof(vis));
    int h=0,t=1;
    for (int i=1; i<=m; i++){
        q[t++]=(Q){1,i};
        vis[1][i]=true;
    }
    while (h<t){
        Q u=q[h++];
        for (int i=0; i<4; i++){
            Q v; v.x=u.x+dx[i],v.y=u.y+dy[i];
            if (vis[v.x][v.y] || v.x<1 || v.x>n || v.y<1 || v.y>m) continue;
            if (a[u.x][u.y]>a[v.x][v.y]) q[t++]=v,vis[v.x][v.y]=true;
        }
    }
}
void init(){
    bfs(); int s=0;
    for (int i=1; i<=m; i++)
        if (!vis[n][i]) s++;
    if (!s) printf("1\n");
    else {
        printf("0\n%d\n",s);
        exit(0);
    }
}

void dfs(int xu,int x,int y){
    vis[x][y]=true;
    if (x==n){
        e[xu].l=min(e[xu].l,y);
        e[xu].r=max(e[xu].r,y);
    }
    for (int i=0; i<4; i++){
        int xx=x+dx[i],yy=y+dy[i];
        if (vis[xx][yy] || xx<1 || xx>n || yy<1 || yy>m) continue;
        if (a[x][y]>a[xx][yy]) dfs(xu,xx,yy);
    }
}

void dp(){
    memset(f,0x3f,sizeof(f)); f[0]=0;
    for (int i=1; i<=m; i++){
        for (int j=1; j<=m; j++)
            if (i>=e[j].l && i<=e[j].r)
                f[i]=min(f[i],f[e[j].l-1]+1);
    }
}

int main(){
    n=in(),m=in();
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            a[i][j]=in();
    init();
    for (int i=1; i<=m; i++){
        memset(vis,0,sizeof(vis));
        e[i].l=m+1,e[i].r=0; dfs(i,1,i);
    }
    dp(); printf("%d\n",f[m]);
    return 0;
}
Noip 2010 解题报告(机器翻译,乌龟棋,关押罪犯,引水入城) 首先,我只是一个刚刚接触信息学的渣渣,很多东西都还没有掌握,甚至未曾听闻。今天做了七年前的Noip,感觉血脉膨胀,不能自已! 阅读详情

相关推荐

NOIP 2010 解题报告(机器翻译,乌龟棋,关押罪犯,引水入城)

NOIP2010

onepointo 702

【转载】NOIP历年部分题目解析

本文转载至某园 高手所写,本人正在学习,以防删除,故此转载,如若侵权,联系删除。 算法 5.现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。那么,“也”字的编码长度可能是( )。 A.1 B.2 C.3 D.4 答案:BC 解释网上有,就是如果有相同出现次数的要爆搜一下 哈夫曼树构造:对于一个序列(以频率为权...

weixin_63294643的博客 2170

noip2010普及组复赛试题及样例数据

noip2010普及组复赛试题及样例数据

NOIP-2017-J1-真题解析

一、选择题 1、B,基础题,考察补码和原码转换,首先符号位是1表示是负数,剩余的位先末尾减1转为反码10101010,然后取反得到原码11010101,转换二进制是-(64+16+4+1)=-85 2、B,基础题,计算机存储基本单位是字节(Byte) 3、C,基础题,考察计算机网络常识,C是世界贸易组织的简称,POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议,SMTP 的全称是“Simple

严老师编程 1736

NOI&&NOIP;近几年竞赛真题

近几年NOI(14~18)及NOIP(12~18,含普及组和提高组)复赛原题,原版PDF版,无测试数据,有的题目有附加文件或着样例文件。

一文掌握SourceTree使用(超级详细)

SourceTree是一款开源的代码仓库客户端工具,界面美观,操作简单,具有代码克隆、本地创建、提交代码、撤销修改,拉取(pull)代码、上传(push)代码、合并分支等操作。对于软件开发人员是一款必备的应用软件。

GM_115的博客 3万+

NOIP 2024 解题分析

1.编辑字符串题意:有两个长为 nnn 的 0/10/10/1 字符串,字符串的有些位置可以进行邻项交换,有的位置不可以。可以进行多次交换。问:多次交换后,相同位置字符相同的位置最多有多少。多组数据。1≤T≤10,1≤n≤1051 \le T \le 10, 1 \le n \le 10^51≤T≤10,1≤n≤105。分析:可以进行前后交换,不好动归。可以交换的部分构成一个连续段,该连续段的字符可以看成可任意位置交换。有一个明显的贪心思路:如果 s1s_1s1​ 的某个位置和 s2s_2s2​ 的某个位置

zhendong 1385

计算pi小数点后10000位

数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。 First Try:定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。 现实是:大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。 Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,...

我的技术人生 7395

历年NOIP做题记录

NOIP做题记录

forever_dreams的博客 418

解决银河麒麟V10分辨率问题:xrandr命令详解与常见错误排查

本文详细解析了在银河麒麟V10系统中使用xrandr命令调整屏幕分辨率的方法,包括核心功能解析、常见问题排查及持久化配置技巧。通过实战指南帮助用户解决分辨率缺失、配置失效等典型问题,提升多显示器环境下的工作效率。

weixin_30642561的博客 505

GStreamer中h264parse元素

h264parse是 GStreamer 中处理 H.264 视频流的关键元素,主要负责解析和准备 H.264 流以便后续处理。

深之JohnChen的专栏 1027

Noip复赛1,2,3题

第一题,我只能说ccf你们肿么了,这么喜欢破Noip史上最简单第一题的记录呢? #include using namespace std; int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); int sum=a*2/10+b*3/10+c*5/10; printf("%d",sum); return 0; }

bluewzl的博客 447

手游功耗优化:从猜想到硬核实测

功耗本质是“硬件在吃电”,要看电流/功率曲线,而不是只看帧率和温度;定量 = 有数字、有曲线、有对比能说“降了 15%”、“峰值从 7W 降到 5.5W”,而不是“我感觉凉快点”;工具方面:大厂会用外接功率仪 + 手机/芯片厂内部平台;平时也会用 Android/iOS/引擎自带的工具做趋势分析;流程上:选典型机型和场景 → 跑脚本采集 → 对齐 Profiler 数据 → 分析 CPU/GPU/网络谁在吃电;再通过版本对比、画质/帧率组合测试,指导配置和优化。这是一个。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 180

NOIP 2010 普及组解题报告

<br />NOIP 2010普及组解题报告<br />北京市八一中学王祺磊<br />感谢:<br />我也学习一下,现在的流行趋势,先开始感谢,但这真的是发自内心的感觉,让我发出一下这些感谢。<br />一、感谢和我一起并肩战斗信息学奥赛教学一线的老师们,是你们给了我温暖,让我感受到一个温馨的集体,在其中,我们一起学习,一起研讨;<br />二、感谢一直和我一起战斗在一起的孩子们,是你们跟我一起,在风雨中奋斗,一起成长;<br />三、感谢我的几位师长,是你们一直在我成长的过程中,指引我前进的方向;<b

我的学习笔记 8664

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7833

vue3:html2canvas+jspdf将页面以A4导出为PDF文件,解决内容截断+在分页处截断问题详细排查和解决教程(jsPDF + html2canvas A4分页截断、内容分页时存在截断)

html2canvas + jsPDF 解决内容截断问题,vue3 jspdf-html2canvas生成多页pdf防截断处理(包含代码),vue3解决html2canvas + jsPDF导出pdf分页内容截断问题,jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例),html页面导出pdf截断问题,html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案,提供html2canvas+jsPDF将HTML页面以A4纸方式导出为PDF后,内容分页

✅ 精选推荐文章 2245

【算法】NOIP2010提高组解题报告

原文地址:NOIP2010提高组解题报告作者:施舟行第一题:模拟   直接按题目描述模拟,用一个队列实现。   由于是非负整数,所以要记得开0下标 第二题:动态规划   首先问题只与所用卡片的个数和位置有关,所以可以根据这个设计状态进行动态规划   记f[i, j, k, l]表示用了i个1步的卡片,j个2步的卡片,k个3步的卡片,l个4步的卡片所获得的最大得分 状态转移方程f[i, j, k,

jyyyyyy 559

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态

执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。

机器人控制与仿真应用 3352

NOIP2010普及组 导弹拦截(重庆一中高2018级信息学竞赛测验3) 解题报告

做题思路(错解):刚拿到这道题时,想得过于复杂,用了两个不同的结构体来存导弹的坐标和导弹到系统的距离的平方和,在存平方和时还把导弹的到两个系统的距离分开存了,本来是想用下标和是到哪个系统的标记来控制不选择重复的导弹,结果发现在计算最小代价时特殊情况太多,并且对于一些数据仍有问题。 解题思路(正解):

cqyz_holiday的博客 1237

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【卖萌向】NOIP提高组 2010解题报告

在推倒NOIP的路上渐行渐远ing …一入OI深似海……直接上正文1.[NOIP2010]机器翻译小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。这 个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果 内存中有,软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单...

weixin_34092455的博客 365

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【NOIP2010TG/codevs1066】 引水入城 解题报告

引水入城  NOIP2010TG/codevs1066钻石Diamond 题目描述 Description   在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政 区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城 市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施

zyf2000 1762

NOIP 2010 引水入城 解题报告

  可以如果题目有解的话(即,最后一排中没有没有水的城市。),那么第一排中的任意一个城市能够运水到达最后一行的城市是一个区间,是连续的!证明我不写了,我也不会,呵呵。以前看过一篇,然后知道这个信息之后,直接贪心就行了,看代码吧: #include <stdio.h> #include <string.h> #include <stdlib.h&gt...

aiechu6301的博客 85

NOIp 2010 解题报告

1. 机器翻译 可以看出这是一道队列的模拟题目。按照题目要求模拟翻译过程即可。 复杂度O(N) 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 ...

weixin_34150224的博客 134

【NOIP2010TG/codevs1069】 关押罪犯 解题报告

关押罪犯  NOIP2010TG/codevs1069钻石Diamond 题目描述 Description S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极 不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨 气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之 间的积怨越多。如果

zyf2000 1472
上一篇: 【树形背包】【JSOI 2008】【bzoj 1017】魔兽地图DotR
下一篇: 本周刷水【2015.11.30~2015.12.6】
morestep
博客等级 码龄12年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值