zoukankan      html  css  js  c++  java
  • NOIp2014 解题报告

    有史以来第一届面向社会征题的NOIp结束了。最开始以为面向社会征题会很难,但是这是我参加的最水的一次NOIp了。

    由于停了两月的课,所以现在正在补文化科目就没时间打代码了。所以所有的题目就均不给出代码了啦啦啦~为了方便没有参加NOIP的童鞋们我把题目网址放到了每道题题解的最后。

    晚了两周的题解如下:

    Day1T1 生活大爆炸版石头剪刀布

         我就不说了。。近几年来NOIp最水的第一题(我会告诉你我去年第一题用的是30分算法?)我们这里有一位小伙伴本地测试AC,但是官方爆0了。我们特意下载了NOI Linux帮他重测,原因是什么呢?没有#include<cstdio>就freopen+stdin。stdin是定义在cstdio里面的好吗!!所以他第一天愉快的爆0。。但是第二天他神奇的加上了#include <fstream>,这个里面有定义stdin。。简直没话说。。另外他的D1T2和D1T3上交的是main.cpp,全部没有收上去。不过收上去也是CE。。

        感谢后世人,戒之慎勿忘!

        一定养成检查文件名、头文件的好习惯!头文件最好一开始就全部打上去,不管用不用得到。在此分享一下我的代码模板:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <fstream>
     4 #include <cstring>
     5 #include <string>
     6 #include <cstdlib>
     7 #include <cmath>
     8 #include <algorithm>
     9 #include <queue>
    10 #include <stack>
    11 #include <map>
    12 #include <set>
    13 #include <list>
    14 #include <vector>
    15 #include <ctime>
    16 #include <functional>
    17 #include <iterator>
    18 using namespace std;
    19 typedef long long LL;
    20 typedef unsigned int Uint; 
    21 const int INF=0x3fffffff;
    22 //==============struct declaration==============
    23 
    24 //==============var declaration=================
    25 
    26 //==============function declaration============
    27 
    28 //==============main code=======================
    29 int main()
    30 {  
    31 #define FILE__
    32 #ifdef FILE__
    33   freopen("spyweb.in","r",stdin);
    34   freopen("spyweb.out","w",stdout);
    35 #endif
    36   
    37   return 0;
    38 }
    39 //================fuction code====================
    Template

        回到正题,n<=200,不同的人会有不同的做法:

        普通青年:打表判断获胜关系。

        文艺青年:将两个外星人调换顺序,那么就可以直接比较大小判断胜负了。

        二逼青年:16或者25个 if。。。。

    http://218.28.19.228/cogs/problem/problem.php?pid=1803

    Day1T2 联合权值

        30分算法:FLOYED算出每两个点之间的距离,然后枚举距离为2的点。算法复杂度O(n3)。

        70分算法:对于每一个点,BFS向外扩展两层。时间复杂度O(n2)。可以轻易的用菊花图卡掉。(比如1号点直接链接9999个点)

        100分算法:距离为2的点之间一定是有一个点的,我们对每个点进行维护,那么最后的答案就是每个点任意两个孩子权值和的乘积,如果直接枚举的话时间复杂度还是O(n2),我们这里用前序和优化,时间复杂度O(n)。

    http://218.28.19.228/cogs/problem/problem.php?pid=1804

    Day1T3 飞扬的小鸟

         不知道为什么我总是喜欢把这一题叫做愤怒的小鸟。。

         话说每年总是有广告题。。选择客栈,玛雅游戏什么的我就不说了。。

         30分算法:没有管道的话。。我还没想有什么算法0_0

         50分算法:暴搜一点问题都没有

         70分算法:用f[x][h]表示飞到(x,h)这个地方最少要点几次屏幕,那么动态转移方程很好写吧:

           f[x+1][h+n*xi]=min{f[x+1][h+n*xi],f[x][h]+n}

           f[x+1][h-yi]=min{f[x+1][h-yi],f[x][h]}

           然后水管全部设置为INF就行,初值f[0][i]=0

           时间复杂度O(n*m2

         100分算法:发现我们重复计算了很多次同一个状态,这就导致转移状态的复杂度太高,所以我们把h mod xi相等的高度一起计算,时间复杂度优化到O(n*m)。

    http://218.28.19.228/cogs/problem/problem.php?pid=1805

    Day1总结:

          还是挺水的,其实不知道各位是否看出来最后一题就是一个向上完全背包,向下0/1背包的模型。考试的时候没能看出来有点可惜了。用的记忆化搜索,可能是因为有一些不能达到的状态没有走到的原因吧,有75分。

          那么第一天275分拿到手了。第一天拿一个100/70/50是很容易的,那么就有220分了。

    Day2T1 无线网络发射器选址

          为什么每天的第一题名字都是这么长。。

          那么这里再用我的一个小伙伴的亲身经历告诉大家考试方法,那就是不作死就不会死。

          很简单的一题,枚举每一个点作为放置路由器的地方,然后统计比较就行。时间复杂度O(128*128*n),针对最大n是20的范围完全可以通过。

          某个小伙伴认为他可以优化一下,写了个前序和。。然后不知道哪里写错了。。70分还是60分来着。然后枚举点只从(d,d)枚举到(128-d,128-d)

          其实能有这么多分都是万幸了。。要我出数据就专门卡这些乱优化的。

          还见到有人写2维树状数组的= =吃饱了没事做。。不过树状数组好在不容易写错。

    http://218.28.19.228/cogs/problem/problem.php?pid=1806

    Day2T2 寻找道路

          看到这一题第一反应就是强联通分量,想了15min才发现沙茶了O_o

          30分算法:应该是给搜索的,但是我不知道怎么搜= =

          60分算法:对于每一个点跑一边BFS看看是否能够到达终点,然后从起点BFS,避开那些不能到达终点的点。时间复杂度O(n2)。

                         或者是floyed判断是否能到达终点似乎方便一些?时间也是够用的。 

          100分算法:难道没有发现对于每一个点BFS判断是否能到达终点就等价于在反图中从终点开始BFS?将不能到的点打上标记,然后正向BFS避开即可。时间富O(n)。

          P.S.我看见了写邻接矩阵完美MLE的。

          有想到正解的实力居然不知道开邻接表也是醉了。。。还看到C++邻接表写挂的,Vector不能用吗= =反正NOIp又不会卡你STL。

    http://218.28.19.228/cogs/problem/problem.php?pid=1807

    Day2T3 解方程

          这个题我最开始就想到求导和二分法求根了。。怎么办我没救了!!

          那么30分算法:n<=2不会我也没办法。。

          50分算法:高精度强行1-m搞起,本来我是想写这个的

          70分算法1:高精度+FFT/高精度+秦九韶/高精度+秦九韶+FFT 然后1-m试一次。但是还是很难写

          70分算法2:将每一个系数均MOD一个大质数,就是计算该方程在模意义下的解。如果你怕不保险就多取几个质数,不过据说这次没有卡1e8+7和2^31-1这两个质数,时间复杂度O(n*m)

          100分算法1:我们知道,如果在模p意义下X不是方程的解,那么X+p一定也不是方程的解,我们选取20-30个10000左右的质数,这样的话理论上可以优化到O(n*sqrt(m))

          100分算法2:我们发现70分算法最后跑出来大概需要1.2S,说明是被卡常数了。于是我们位运算加速MOD过程,取2^32-1这个数比较好。虽然不是质数不过也还好。那么我们就让unsigned int自然溢出可好。。这个方法没有实践过,不保证一定AC。

    http://218.28.19.228/cogs/problem/problem.php?pid=1808

    Day2总结:

        也挺水的,Day2的基本分数应该是100/70/30,那么就是200分,加上Day1一共420分,在HN应该是踩线1等。

        不过这只是保底分。。你Day2T3如果只是能想出30分算法也没办法是吧。。所以这次比赛一等在除了ZJ和GD应该不难。ZJ530,GD520只要你每天前两题AC,第三题70也没问题。

        那么我是100/100/75/100/100/70,一共545分,HN一等。

        HNOIへ!然后参加了HNOI之后估计就要滚粗了吧- - 

        滚回去准备中科大少年班啦~

  • 相关阅读:
    [原] Code Color Scheme
    [转] 13款开源Java大数据工具,从理论到实践的剖析
    如何在Web页面上直接打开、编辑、创建Office文档 (转)
    自己用VS2008写的数据库操作包装类
    可以用ORACLE的临时表
    ASP.net中动态加载控件时一些问题的总结(转)
    Infragistics.WebUI.WebCombo的用法
    oracle中创建表的一种方法
    oracle中插入一个blob数据
    中国人正在上的四个当
  • 原文地址:https://www.cnblogs.com/Houjikan/p/4119817.html
Copyright © 2011-2022 走看看