V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikicomo
V2EX  ›  C

HDOJ 2005 为啥子会这样?我方了!

  •  
  •   mikicomo · 2015-12-04 22:01:43 +08:00 · 997 次点击
    这是一个创建于 3067 天前的主题,其中的信息可能已经有所发展或是发生改变。

    QQ20151204215344.png
    QQ20151204215350.png
    QQ20151204215353.png

    为什么第二个反而过了?!这不科学啊,和要求的根本不一样啊。。。

    [第二个明明是输入一个输出一个结果的!]

    为什么!不闹,在线等,挺急的!!!

    http://acm.hdu.edu.cn/showproblem.php?pid=2005

    15 条回复    2015-12-05 20:29:47 +08:00
    mikicomo
        1
    mikicomo  
    OP
       2015-12-04 22:12:32 +08:00
    @HentaiMew 前排艾特围观〒_〒
    messyidea
        2
    messyidea  
       2015-12-04 23:02:49 +08:00
    输入一个输出一个结果又什么问题。。 ACM 不都是这样的吗。
    评测的时候基本上重定向一下输入输出,比较一下输出。
    juxingzhutou
        3
    juxingzhutou  
       2015-12-04 23:07:53 +08:00
    赞同楼上,都是比对标准输出的数据的,跟一个一个输出还是一起输出没有关系。
    messyidea
        4
    messyidea  
       2015-12-04 23:13:54 +08:00
    第一个程序输入多组数据是对的吗?你可以把数据量增加一点。刷这种题一般记答案都是直接 int array[1000000],然后把答案一个个记录到数组中去就好了,不会超内存,速度又快。动态分配内存不熟练很容易错的
    HentaiMew
        5
    HentaiMew  
       2015-12-04 23:19:45 +08:00
    话说为什么我被艾特了。吓哭
    sengxian
        6
    sengxian  
       2015-12-04 23:23:21 +08:00
    ```cpp
    // Created by Sengxian on 12/4/15.
    // Copyright (c) 2015 年 Sengxian. All rights reserved.
    // HDOJ 2005
    #include <stdio.h>
    int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    int main() {
    int y, m, d, ans;
    while(~scanf("%d/%d/%d", &y, &m, &d)) {
    if(y % 400 == 0 || (y % 100 != 0 && y % 4 == 0)) month[1] = 29;
    else month[1] = 28;
    ans = 0;
    for(int i = 0; i < m - 1; ++i) ans += month[i];
    printf("%d\n", ans + d);
    }
    return 0;
    }
    ```
    没有问题,已经 A 了
    sengxian
        7
    sengxian  
       2015-12-04 23:25:55 +08:00
    每组输出和在一起输出是一样的,没有任何区别。
    第一个程序没你这样写的,即使要记在一起输出,好歹也开个大数组啊,或者直接用 STL 里面的 Vector 。
    mikicomo
        8
    mikicomo  
    OP
       2015-12-04 23:58:26 +08:00
    @sengxian
    @messyidea
    分开输出和一起输出是没有区别的吗?(还是特指这种 io 题?)


    @messyidea
    第一组应该是对的吧?我的想法是设定 N 为一个数值,(这里设定的 2 是随手设定的,提交的时候我设定的不是 2 , 2 是我本地测试取得数字,看内部错没错),然后先 malloc 一个数组出来,如果发现用完了,就再 realloc 续加一组 N 长度的数组
    mikicomo
        9
    mikicomo  
    OP
       2015-12-05 00:02:51 +08:00
    @sengxian 嗯,我也知道这样可以 A ,就是心里还有些疑问....
    messyidea
        10
    messyidea  
       2015-12-05 00:33:49 +08:00 via Android
    @mikicomo 我不太熟悉 realloc , realloc 返回值赋给 flag 之后, flag 变了吗?如果会变的话要保留 flag 的初始值,不然只能输出一部分答案。还有, realloc 之后 N 没有变化, f 一直变大,那不是不管多大数据量,只能够 reqlloc 一遍?是不是有点问题?还有下次尽量贴代码,不要截图,肉眼 debug 有点累
    mikicomo
        11
    mikicomo  
    OP
       2015-12-05 10:28:17 +08:00
    @messyidea
    realloc 的话是在原有基础上扩充存储单元,前面的值是保留下来的,(“ realloc 之后 N 没有变化, f 一直变大,那不是不管多大数据量,只能够 reqlloc 一遍?”)被你一说真的发现了!感谢 ing ,我再改改测试下

    #include<stdio.h>
    #include<stdlib.h>
    #define N 2
    int main(void)
    {
    int year, mon, day,t=0,i;
    int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int *flag;
    int f=0;
    flag=(int*)malloc(N*sizeof(int));
    while(scanf("%d/%d/%d",&year,&mon,&day)!= EOF )
    {
    if ( year%400 == 0 || (year%100 != 0 && year%4 == 0))
    {
    month[1]+=1;
    }

    for(i=0;i<mon-1;i++)
    t+=month[i];

    t=t+day;
    *(flag+f)=t;
    f++;
    if (f == N)
    flag=(int*)realloc(flag,N*sizeof(int));
    t=0;
    month[1]=28;
    }
    for(int cnt=0;cnt<f;cnt++)
    {
    printf("%d\n",*(flag+cnt));
    }
    free(flag);
    return 0;
    }
    sengxian
        12
    sengxian  
       2015-12-05 11:01:15 +08:00
    @mikicomo 强烈不建议这样做,这样做只会增加编程复杂度,而且对于初学者来说并不是好事。在初学过程中,抓大放小,抓住核心矛盾而适当忽略细节是必要的。
    mikicomo
        13
    mikicomo  
    OP
       2015-12-05 11:45:07 +08:00
    @sengxian 谢谢,会注意哒
    karia
        14
    karia  
       2015-12-05 19:24:16 +08:00
    每天切题切烦的时候就回去切水题。。。
    mikicomo
        15
    mikicomo  
    OP
       2015-12-05 20:29:47 +08:00
    @karia 给能切真题的神跪了 :)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1101 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 18:15 · PVG 02:15 · LAX 11:15 · JFK 14:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.