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

2015-12-04 22:01:43 +08:00
 mikicomo



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

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

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

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

1090 次点击
所在节点    C
15 条回复
mikicomo
2015-12-04 22:12:32 +08:00
@HentaiMew 前排艾特围观〒_〒
messyidea
2015-12-04 23:02:49 +08:00
输入一个输出一个结果又什么问题。。 ACM 不都是这样的吗。
评测的时候基本上重定向一下输入输出,比较一下输出。
juxingzhutou
2015-12-04 23:07:53 +08:00
赞同楼上,都是比对标准输出的数据的,跟一个一个输出还是一起输出没有关系。
messyidea
2015-12-04 23:13:54 +08:00
第一个程序输入多组数据是对的吗?你可以把数据量增加一点。刷这种题一般记答案都是直接 int array[1000000],然后把答案一个个记录到数组中去就好了,不会超内存,速度又快。动态分配内存不熟练很容易错的
HentaiMew
2015-12-04 23:19:45 +08:00
话说为什么我被艾特了。吓哭
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
2015-12-04 23:25:55 +08:00
每组输出和在一起输出是一样的,没有任何区别。
第一个程序没你这样写的,即使要记在一起输出,好歹也开个大数组啊,或者直接用 STL 里面的 Vector 。
mikicomo
2015-12-04 23:58:26 +08:00
@sengxian
@messyidea
分开输出和一起输出是没有区别的吗?(还是特指这种 io 题?)


@messyidea
第一组应该是对的吧?我的想法是设定 N 为一个数值,(这里设定的 2 是随手设定的,提交的时候我设定的不是 2 , 2 是我本地测试取得数字,看内部错没错),然后先 malloc 一个数组出来,如果发现用完了,就再 realloc 续加一组 N 长度的数组
mikicomo
2015-12-05 00:02:51 +08:00
@sengxian 嗯,我也知道这样可以 A ,就是心里还有些疑问....
messyidea
2015-12-05 00:33:49 +08:00
@mikicomo 我不太熟悉 realloc , realloc 返回值赋给 flag 之后, flag 变了吗?如果会变的话要保留 flag 的初始值,不然只能输出一部分答案。还有, realloc 之后 N 没有变化, f 一直变大,那不是不管多大数据量,只能够 reqlloc 一遍?是不是有点问题?还有下次尽量贴代码,不要截图,肉眼 debug 有点累
mikicomo
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
2015-12-05 11:01:15 +08:00
@mikicomo 强烈不建议这样做,这样做只会增加编程复杂度,而且对于初学者来说并不是好事。在初学过程中,抓大放小,抓住核心矛盾而适当忽略细节是必要的。
mikicomo
2015-12-05 11:45:07 +08:00
@sengxian 谢谢,会注意哒
karia
2015-12-05 19:24:16 +08:00
每天切题切烦的时候就回去切水题。。。
mikicomo
2015-12-05 20:29:47 +08:00
@karia 给能切真题的神跪了 :)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/241248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX