45 条题解

  • 0
    @ 2008-12-10 17:29:02

    orz教主的算法太强大了!

    orz!orz!orz!orz!orz!orz!orz!orz!orz!orz!orz!

    orz!orz!orz!orz!orz!orz!orz!orz!orz!orz!orz!

    orz!orz!orz!orz!orz!orz!orz!orz!orz!orz!orz!

  • 0
    @ 2008-11-11 18:18:17

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    秒杀

  • 0
    @ 2008-11-11 01:02:28

    LS的LS:"而为什么那种扫来扫去的算法为什么能过....只能说数据不够强大了.."

    这说明你根本没弄清楚这题

    扫2次的算法在理论上是完美的,不是数据弱的问题。

  • 0
    @ 2008-11-10 20:57:09

    我觉得用最短路能做的啊,为什么只有50分呢?

  • 0
    @ 2008-11-10 20:37:04

    为什么??

    小的写了线段树dp,从右往左。应该是O(nlogn)啊,怎么只过6个点呢??

    查询O(lgn),修改我也用了信息传递的小优化,纯色结点不向下修改,只在询问时向下修改(传递信息)。可是用Cena一测发现比不优化还慢呢!why??

    希望各位大牛帮忙看看,指点迷津!

    #include

    int n,nn,m,a[100011],f[262150],ask[50011],min[262150],loc[262150],L,R,X,pure[262150];

    void build(int i,int l,int r)

    {

    f[i]=999999;

    if(l==r) {loc[l]=i;return;}

    build(i*2,l,(l+r)/2);

    build(i*2+1,(l+r)/2+1,r);

    }

    void editdown(int i,int l,int r)

    {int a,b;

    if(LX){pure[i]=1;f[i]=X;return;}//叶子都是纯色结点

    if(l==r){if(f[i]>X)f[i]=X; return; }

    if(f[i]>X)f[i]=X;

    if(L

  • 0
    @ 2008-11-10 21:16:18

    看来我编程功底有待提高......

    第一次竟然把堆给打错了..

    我用的dijstra过了6个点.....

    极端数据就不行了阿

    然后某牡牛(我同学)就说....从后面扫一遍...在从前面扫一遍......就能过了....

    可惜急躁的我...硬是少写了一句话...结果wa...过了4个点.....

    第二次dragon无情地最后一个点超时.....

    第三次puppy终于让我AC了...

    不过个人觉得....dijstra是可以的....只不过在这道题目预处理的话就用了很多时间了

    而为什么那种扫来扫去的算法为什么能过....只能说数据不够强大了..

  • 0
    @ 2008-11-10 19:31:53

    桥牛这实力啊,全部秒杀,Orz

  • 0
    @ 2008-11-10 19:22:14

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    Orz教主无敌的O(N)算法。。

    教主实力在的 Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz

  • 0
    @ 2008-11-10 18:53:44

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 103ms

    ├ 测试数据 10:答案正确... 603ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:706ms

    想出来方法就很简单了,从后往前扫一次,再从前往后扫一次,基本上平均情况O(n)

    最后那两个点数据大,感觉慢了点儿,不过还是可以了

  • 0
    @ 2008-11-10 18:44:28

    对vj的评测机真的无语了~~

    同样的程序,在自己的机子上ac的~~

    第一次交,

    在vj上竟然后三个点‘运行超时|格式错误...’得了unaccepted;

    同样的程序,我在第二次交(啥都没改);

    只有一个点‘运行超时|格式错误...’显示90分,

    但是!!!!这时候神奇的事情发生了,一看‘Flag   Accepted ’竟然ac了!!!!!!!!!!!!!!!!!!!1

    …………………………………………

  • 0
    @ 2008-11-10 17:44:25

    dp+奇怪的优化

    居然过了,果然没有卡我那个优化的数据

  • 0
    @ 2008-11-10 23:32:33

    第4题在1422

  • 0
    @ 2008-11-10 15:21:15

    我用贪心的才对3个`\唯一不同的是我没排序``

    昨天想说只要从F[1]拓展到F[2]一直拓展下去便可``

    不知道为什么会有错解不只是超时`\

    今天排序一下就AC了`

  • 0
    @ 2008-11-10 14:07:46

    无限鄙视这次的测评...今天用一摸一样的程序提交前两道,ac,昨天测出来是0分...

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

  • 0
    @ 2008-11-10 13:05:13

    设置一个上限max,一开始max=n+1,然后找出一个i使得min(i)且i+a[i]>=max,则sum[i](表示第I个数所需要移动次数)=重新设置上限的次数+1,i~max之间的数j:若j+a[j]>=max 则sum[j]=sum[i] 否则sum[j]=sum[i]+1;重复做即可

    找I的时候需要用到RMQ,具体如下:

    先预处理出一个数组a,存i+a[i],从小到大排序一下。要找i的时候,二分查找max,假设a中第一个>=max的值在第k个,则a数组中k~n内所有的数所代表的数都可以一步到达max,所以我们找出一个i~n中所代表的数的最小值,即为所

    求I.

    算法复杂度O(nlogn)

  • 0
    @ 2008-11-10 11:07:00

    类似区间覆盖...

  • 0
    @ 2008-11-10 10:55:21

    编了个极其猥琐的heap+dijkstra,vijos竟然说我编译不过,lazarus上很稳的……

    不过,又试了试也就得60分,太不好了!

  • 0
    @ 2008-11-10 16:05:49

    用暴力搜的……居然除了第八个点都秒杀……

  • 0
    @ 2008-11-10 09:49:00

    #include

    #define maxn 100000

    #define INF 20000000

    long n,m,a[maxn+10],f[maxn+10],g[maxn+10];

    int main()

    {

    long i,j,up,tmp,ans;

    scanf("%ld%ld",&n,&m);

    for(i=1;i=1;--i)

    {

    f[i]=INF;

    up=i+a[i];

    if(up>n) {f[i]=1;continue;}

    for(j=up;j>i;--j)

    if(f[j]+1

  • 0
    @ 2008-11-10 09:45:14

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 9ms

    ├ 测试数据 09:答案正确... 25ms

    ├ 测试数据 10:答案正确... 9ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:43ms

    从后往前DP,利用RMQ优化到NlogN

信息

ID
1471
难度
6
分类
动态规划 | 单调性DP 点击显示
标签
递交数
787
已通过
212
通过率
27%
被复制
2
上传者