[NOIP集训]10月19日

今天的文件夹:10月19日.zip

今天中午讲了一下昨天的题,还是有水平的。

下午复习搜索,居然有NOI难度的题,不过给了讲解,也有参考程序,就不多说了。主要说说第一题。

T1:这是道BFS练手题,但都写不对。第一个难点是读入,虽然题目中给的读入顺序很吓人,但仔细想想,就类似于“字典序比较”了。在Pascal中可以直接这样读入:

for i:=1 to l do
    for j:=1 to w do
        for k:=1 to h do
            read(a[i,j,k]);

读入之后,按照与读入相同的顺序进行查找,找到第一个未被标记的点,然后以它为起点做一次BFS(搜索中注意及时更新标记,把所有可以判断为同一区域的点标记下来)。做完这一次BFS,标记已被更新,从上次的位置开始继续查找。这样找过一遍之后,可以保证所有点都被标记,统计所有BFS起点的个数即可。

代码:


 1 program scan;
 2 var
 3     l,w,h,m:longint;
 4     a,b:array[-1..51,-1..51,-1..51] of longint;
 5     i,j,k:byte;
 6     n,left,right:longint;
 7     x0,y0,z0:byte;
 8     queue:array[1..1000000,1..3] of byte;
 9 procedure clear();
10 begin
11     left:=1;
12     right:=0;
13 end;
14 procedure enque(x,y,z:longint);
15 begin
16     inc(right);
17     queue[right,1]:=x;
18     queue[right,2]:=y;
19     queue[right,3]:=z;
20     b[x,y,z]:=n;
21 end;
22 procedure deque();
23 begin
24     inc(left);
25 end;
26 function check(t:longint):boolean;
27 begin
28     if (x0<1)or(x0>l)or(y0<1)or(y0>W)or(z0<1)or(z0>h) then
29         exit(false);
30     if b[x0,y0,z0]>0 then
31         exit(false);
32     if abs(a[x0,y0,z0]-t)<=m then
33         exit(true)
34     else
35         exit(false);
36 end;
37 procedure bfs(x,y,z:longint);
38 begin
39     clear();
40     enque(x,y,z);
41     while (left<=right) do
42     begin
43         x:=queue[left,1];
44         y:=queue[left,2];
45         z:=queue[left,3];
46         deque();
47         x0:=x-1; y0:=y; z0:=z;
48         if check(a[x,y,z]) then
49             enque(x0,y0,z0);
50         x0:=x+1; y0:=y; z0:=z;
51         if check(a[x,y,z]) then
52             enque(x0,y0,z0);
53         x0:=x; y0:=y-1; z0:=z;
54         if check(a[x,y,z]) then
55             enque(x0,y0,z0);
56         x0:=x; y0:=y+1; z0:=z;
57         if check(a[x,y,z]) then
58             enque(x0,y0,z0);
59         x0:=x; y0:=y; z0:=z-1;
60         if check(a[x,y,z]) then
61             enque(x0,y0,z0);
62         x0:=x; y0:=y; z0:=z+1;
63         if check(a[x,y,z]) then
64             enque(x0,y0,z0);
65     end;
66 end;
67 begin
68     assign(input,‘scan.in‘);
69     reset(input);
70     assign(output,‘scan.out‘);
71     rewrite(output);
72     readln(l,w,h,m);
73     for i:=1 to l do
74         for j:=1 to w do
75             for k:=1 to h do
76                 read(a[i,j,k]);
77     fillchar(b,sizeof(b),0);
78     n:=0;
79     for i:=1 to l do
80         for j:=1 to w do
81             for k:=1 to h do
82                 if b[i,j,k]=0 then
83                     begin
84                         inc(n);
85                         bfs(i,j,k);
86                     end;
87     writeln(n);
88     close(input);
89     close(output);
90 end.

scan.pas

时间: 2024-10-27 03:17:05

[NOIP集训]10月19日的相关文章

[NOIP集训]10月16日

今天的文件夹:10月16日.zip 毕竟是第一天,题目比较简单,简单说下做法. T1:对区间按左端点为第一关键字,右端点为第二关键字进行排序,然后计算可合并的区间,即前面区间的右端点不小于后面区间的左端点,这样合并后,新区间的右端点为二者右端点中的较大值. T2:这题跪了一次.样例太有误导性,严重差评.题意是 询问在时间$[x,y]$内海浪高度第$K$小的单位时刻是那个时刻. 但由于样例太弱,错以为是 询问在时间$[x,y]$内海浪高度第$K$小的海浪高度值. 除了这个问题,别的都很简单了,抽出

[NOIP集训]10月18日

今天的文件夹:10月18日.zip 今天脑子转不起来,想不出来动规了. Orz @张翰文学神 T1:快排,然后求连续数字的长度,简单判断即可. T2~T4:容我再想两天... T2原题: 题2. 养zsc(pig.pas/c/cpp) [题目描述] 你有一个zsc圈,有N头zsc,每天你最多可以杀一头zsc卖钱,获益就是zsc的体重.但是每过一天每头zsc的体重都会下降P[i](当然,如果zsc体重<=0了,自然获利就是0),问K天内你的最大获利. [输人文件] 第一行两个数N.K: 第二行N个

[NOIP集训]10月22日

今天的文件夹:10月22日.zip 并查集.哈希表是很有意思的算法,不过更好的是,今天的题我以前都A掉了~ T1:这题最省事的是用STL库的map,然后并查集水过.当然用自己写的Hash函数通过也没有压力. T2:注意这题不要想复杂了,题中的判断规则只有一层,没必要考虑“敌人的敌人的朋友的敌人的朋友的敌人的敌人”这类情况,直接大暴力.数据结构采用并查集,先合并朋友,然后将敌人关系存为一张图,对图中的每个点,把它的所有敌人两两合并.最后输出集合个数. T3:按顺序打击不好处理,我们倒过来看,相当于

【Lazy资产管理系统v1.0】2019年10月19日发布测试版

Lazy资产管理系统,是一款简洁而高效的资产管理系统,包括[资产明细查询].[资产新增管理].[资产变动管理].[资产借用管理].[资产处置管理].[我的资产变动记录].[我的资产借用记录]等功能. 为了解决广大企业管理者资产管理的难题,作者将此项目免费发布出来,供大家使用与交流,欢迎大家加入Lazy资产管理系统QQ交流群:×××,作者愿意和一起做好做强这款简洁而高效的资产管理系统. Lazy资产管理系统,将于2019年10月19日发布测试版本,欢迎大家下载测试,以便我们提供更好的免费版本给大家

类型--2014年10月19日

// //Console.WriteLine(); // //int s = int.Parse(Console.ReadLine()); // double d = double.Parse(Console.ReadLine()); // //d=Math.Sqrt(d);//平方根,即25时,输出为5,,,输入4,0时输出2 // // d=Math.PI;//圆周率 // //d = Math.Ceiling(d);//取上线.即2.1为3.....1.0为1 // //d = Math.

5、10月19日

1.需求开发过程的四个主要活动,及其内容简述: 需求获取(捕获用户的需求,产生<用户需求说明书>) .需求分析(将需求信息进行分析.抽象描述.建立概念模型) .需求定义(编制<需求规格说明书>SRS ) .需求验证(对需求文档进行评审,确认需求). 2.结合图17.5,描述追溯.回溯. 4类需求跟踪能力链如下: (1)"客户需求"可向前追溯到"需求",从而区分出开发过程中或开发结束后由于需求变更受到影响的需求,这也确保需求规格说明书包括所有客

2015年10月19日作业

1.需求开发过程的四个主要活动,及其内容简述: 1)制定需求管理计划 制定需求管理计划的主要步骤如下:建立并维护需求管理的组织方针.确定需求管理需使用的资源.分配责任.培训计划.确定需求管理的项目干系人,并确定其介入时机.制定判断项目工作与需求不一致的准则和纠正规程.制定需求跟踪性矩阵.制定需求变更审批规程和制定审批规程. 2)编写需求规格说明 主要内容是版本控制,具体控制办法可参照配置项版本号规则 3)需求变更管理 主要内容有控制项目范围的扩展.变更过程控制.编辑变更控制状态报告和变更控制工具

2016年10月19日--传值、传址、结构体

传值---传址 传值:将变量名中存放的值进行传输 private void 传值(int a) { a += 10; } static void Main(string[] args) { //实例化 初始化 这个类 Program hs = new Program(); int a = 0; hs.传值(a);//a不变 } 格式 传址:将这个变量名直接传输过去,若在另一边有赋值情况,这边的值会发生变化 private void 传址(int a, out int b) { b = a + 1

高级学员:2015年10月19日作业

作业:1.需求开发过程的四个主要活动,及其内容简述:2.结合图17.5,描述追溯.回溯.3.PMO的日常性职能.战略性职能,分别是什么?4.DIPP分析的公式,及简述:5.大型及复杂项目的四个特征:6.大型项目按哪3条制订工作分解结构:7.波士顿矩阵图的四类业务,及简述:8.防御型战略组织的特征:开拓型战略组织的特征:分析型战略组织的特征:被动反应型战略组织的特征. 最晚提交时间:下次上课前. 提交方法:同学们按照要求完成作业,并发布在自己的51CTO博客,并将博文地址以评论的形式发布在老师布置