2016.7.12 NOIP2013提高组 day2解题报告(未完成版)

考试马不停蹄地到来,昨天的程序还没改完,今天又考了day2,虽然没有昨天那么懵逼,但还是不尽如人意,现在还没讲题,我打算先自己看一次解题报告,争取加深理解,毕竟一位前辈说过,做一套题的质量取决于题本身的质量和你思考的程度。

考试总结:

1.数据分析推测可行算法很重要,要灵活掌握常用算法的时间复杂度;

2.对拍的方式要熟练,写对拍耗费的时间过多;

3.要加强代码实现的能力,比较突出的表现就是写200-300行多函数模拟或搜索的能力;

4.不要急于写过不完的程序,要多拿一点时间来分析数据,样例不够还可以自己出(不然就会像今天一样写完了没事做;

5.不要有畏难情绪,考试最重要的是思考而不是分数,只要花了足够的时间来思考,即使最后没实现,所获得的也远远比直接写暴力算法要多得多,现在练习最重要的还是思维,而且看似很难的题也有很多人做出来,所以一定不要害怕;

6.要逐渐适应高强度长时间的思考,当然如果实在很累了还是可以去楼下买两串关东煮的xxx;

参考资料:

1.昨天的参考资料2;

2.老师提供的解题报告3,来自DOVECL

一.积木大赛

题意:n是宽度,H是要求高度,求每一层的联通块;n<=100000;h<=10000;(题意理解有多么重要在这里就可见一斑了:我的理解让我局限于外层循环  maxnh,然而参考资料2的理解就打开了另一种算法:如何让一个空序列变成A序列;

题目分析:刚拿到这道题,maxnH*n的算法一定会浮现在我们的脑海里,接着,一些比较谨慎的人(毕竟虽然评测机理论速度能达到1e9,但由于分操作的存在,平时就算是一个很’干净’的1e8的程序评测时我们都会提心吊胆)会发现,最大1e9的计算量可能会超过时间;实际上也的确超了最后一组,所以采用更智能的方法是很有必要的;

然后!一件神奇的事情发生了!我居然给内层用了分治(手动笑哭),然后费尽心思让它更复杂了(手动再见),唯一有安慰的是这样锻炼了一下我的思维能力orz,我觉得这个分治蛮巧妙的,所以顺便贴上来了:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
int n,h[100005],ans,maxn;
void res(int lef,int rig)
{
    if(lef>=rig-1)
    {
        if(h[lef]>=1||h[rig]>=1)
           ans++;
           h[lef]--;
           if(lef!=rig)
           h[rig]--;
           return;
    }
    int mid=(lef+rig)/2;
    res(lef,mid);res(mid+1,rig);
    if(h[mid]>=0&&h[mid+1]>=0)ans--;
}
int main()
{
    freopen("block.in","r",stdin);
    freopen("block.out","w",stdout);
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    cin>>h[i];maxn=max(maxn,h[i]);
    }
    for(int i=1;i<=maxn;i++)
    {
        res(1,n);
    }
    cout<<ans;
    return 0;
}

然后这道题的正解应该是差分序列最快,然后也有同学用了分模块递归(用其他的数据结构应该是nlogn左右,这里也告诉我们一个道理:数据结构是基础,算法是方法,数据结构一定不能小瞧,要灵活掌握其基础上的运算!)

因为差分序列比较经典(这是一种比较经典的数学思维运用,昨天的火柴也是),所以改了差分的程序(才不是因为这种比较简单呢qwqqq

二.花匠

题意:n花数,h高度,求正弦函数(误),求波动序列

题目分析,把这道题初步分析了一下我就动手写了搜索+优化(过三组),

时间: 2024-11-03 22:18:16

2016.7.12 NOIP2013提高组 day2解题报告(未完成版)的相关文章

【未完成0.0】Noip2012提高组day2 解题报告

第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一行,包含两个正整数a, b,用一个空格隔开. 输出格式 输出只有一行,包含一个正整数x0,即最小正整数解.输入数据保证一定有解. 样例1 样例输入1 3 10 样例输出1 7 限制 每个测试点1s 提示 对于40%的数据,2 ≤b≤ 1,000: 对于60%的数据,2 ≤b≤ 50,000,000:

NOIP2013 提高组day2 3 华容道 BFS

描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的: 有些棋子是固定的,有些棋子则是可以移动的: 任何与空白的格子相邻(有公共的边)的格子上的棋子都可以移动到空白

[部分题解]noip2013提高组Day2

积木大赛: 之前没有仔细地想,然后就直接暴力一点(骗点分),去扫每一高度,连到一起的个数,于是2组超时 先把暴力程序贴上来(可以当对拍机) 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 FILE *fin = fopen("block.in","r"); 5 FILE *fout= fopen("block.out","w&quo

NOIp 2013 Day2 解题报告

NOIp 2013 Day2 解题报告 1.   积木大赛 每次只要选取连续最大的一段区间即可. 继续归纳可得,答案为∑i=1nmax{0,hi-hi-1} 复杂度O(N) 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 8 //variable/

常州培训 day2 解题报告

第一题: 题目大意: 给出一个M面的骰子,投N次,求最大期望值. 最大期望值的定义: 比如M=2,N=2, 那么 2次可以是 1,1,最大值为1: 1,2最大值为2: 2,1最大值为2: 2,2 最大值为2: 最大期望值就是  (1+2+2+2)/4=1.75 也就是把所有情况的最大值加起来,除以方案数.M,N<=5000 解题过程:1.这题只能说自己数学水平不够,只能找找规律骗点分,竟然混了个40分.小的数据直接模拟,拿40分. 2.正解: 考虑最大值为1的情况,sum=1*(1^N-0^N)

第五届蓝桥杯软件大赛C/C++本科B组决赛解题报告

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

NOIP 2013 提高组 day2 积木大赛 找拐点

积木大赛 描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第??块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 n 块高度为 0 的积木).接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第 L 块到第 R 块之间(含第 L 块和第 R 块)所有积木的高度分别增加1. 小 M 是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少.但她不是一个勤于动手的孩

NOIP2016普及组复赛解题报告

提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰. (附:洛谷题目链接 T1:https://www.luogu.org/problem/show?pid=1909 T2:https://www.luogu.org/problem/show?pid=2010 T3:https://www.luogu.org/problem/show?pid=2058 T4:https://www.luogu.org/problem/show?pid=2119) 不得不说,亲历了14.1

【解题】noip2013提高组(day1+day2)

这套题,勾起了我无数美好的回忆←意思是该好好复习了... [day1] 一.转圈游戏 首先,第一题,在处理k的时候应该用快速幂算法. 大概就是下面这样,要注意的是:1.二分时要判断有无余数.2.先设数,在进行乘积运算,不然会递归两次=.= 1 int pow(int a,int pos) 2 { 3 if(pos==1) return a%t; 4 int temp=pow(a,pos/2); 5 if(pos%2==1) return (temp*temp*a)%t; 6 return (te