| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2840 人关注过本帖
标题:[求助]一道ACM题
只看楼主 加入收藏
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以上程序提交的时候都没通过,都是超时,包括25楼,估计是什么情况忽略了
帮忙看看,呵呵,我搞得有些头晕,想不出来还有什么反例能让它不输出.

对不礼貌的女生收钱......
2006-09-27 14:01
ww84020209
Rank: 1
等 级:新手上路
帖 子:190
专家分:0
注 册:2006-8-21
收藏
得分:0 

我看25楼没什么错误啊.
25楼的这个程序不行吗?
#include<stdio.h>
#include<string.h>
#define M 257
char st[M];
int main()
{
int l,i,k;
int mark;
while(scanf("%s",st)!=EOF)
{
l=strlen(st);
k=0;
mark=0;
for(i=l-1;i>=0;i--)
if(st[i]>='p'&&st[i]<='z')
k++;
else if(st[i]=='N'&&k>=1) ;
else if((st[i]=='I'||st[i]=='C'||st[i]=='D'||st[i]=='E')&&k>=2)
k--;
else
{
mark=1;
break;
}
if(k!=1)mark=1;
if(mark==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}


2006-09-27 15:24
xiaoyunhu
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2006-9-24
收藏
得分:0 

楼主的题目源自何处啊?北大?浙大?偶对acm也很感兴趣...


小晕乎
2006-09-27 15:59
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
以下是引用soft_wind在2006-9-27 14:01:55的发言:
以上程序提交的时候都没通过,都是超时,包括25楼,估计是什么情况忽略了
帮忙看看,呵呵,我搞得有些头晕,想不出来还有什么反例能让它不输出.

超时,不可能吧,你输入有没有改动,
把我的代码用C++再交一遍


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-27 16:11
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

刚看到两位的帖子,抱歉。
工大的,http://acm.hit.edu.cn/ojs/overview.php?from=1000
另:25楼也不行,目前的都不行.我估计是在运行的时候没有输出,导致超时.不知道忽略了什么情况...


对不礼貌的女生收钱......
2006-09-27 16:18
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
恩。用C++果然是行的!
可能我们工大的那个C编译器检查得太严格了,晕!

对不礼貌的女生收钱......
2006-09-27 16:21
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
只有我的那两个依然不行,晕死!
能帮忙看看吗?还有什么情况我忽略了?

对不礼貌的女生收钱......
2006-09-27 16:24
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

我感觉是输入的问题,不然不可能是超时的
可能测试数据输入结束的时候,你的程序还有进行输入.......
你把你的输入改成我那样的试试.


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-09-27 16:25
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
呵呵,谢谢了,哈哈,我说我看我的程序老半天也没再找出错误了,晕啊!
谢谢!

对不礼貌的女生收钱......
2006-09-27 16:36
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
以下是引用cwande在2006-9-26 22:21:53的发言:
哦也对,应该事前对count进行判断,
int count=0;//记录句子的个数,
1.st[i]>='p'&&st[i]<='z',count++;
2.st[i]=C,D,E,I&&count>=2; count--;//因为把两个句子合成了一个句子这并不能保证两个句子是合法的 如果是 CpqDr 就不能识别出它是错的句子
3.st[i]=='N'&&count>=1,不用处理//句子的个数不变
4.出现其余情况就可以跳出循环,
遍历结束以后再进行判断

由题目可以知道
s->p~z
s->Ns
s->Css | Dss | Ess | Iss // 因为t也是句子,可用s代替

从第一个字符判断,遇到 C D E 或 I 调用两次 s 依次对后面的字符判断
不是 C D E I N 的字符,也不在p~z内,即是错误的句子

大体是这样的,程序没时间写了

int judge( )
{
switch(a[i])
{
case 'C': judge();
judge();
case '


片言可以明百意 坐驰可以役万里
2006-11-22 09:53
快速回复:[求助]一道ACM题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015858 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved