找回密码
 注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

扫一扫,访问微社区

快捷导航
事务所专题-柯南20周年纪念事件簿
搜索
查看: 2759|回复: 23
打印 上一主题 下一主题

信息学奥赛试题里也有柯南

[复制链接]

侦探助理

25

主题

0

好友

162

积分

 

升级
70%
帖子
861
精华
2
积分
162
威望
105
RP
121
金钱
8 柯币
人气
136 ℃
注册时间
2006-7-20
跳转到指定楼层
顶楼
发表于 2006-10-25 18:08:37 |只看该作者 |倒序浏览
N0IP2003提高组试题
题二 侦探推理
【问题描述】
明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明明的任务就是找出这个罪犯。接着,明明逐个询问每一个同学,被询问者可能会说:
I am guilty.
I am not guilty.
XXX am guilty.
XXX am not guilty.
Today is XXX.
证词中出现的其他话,都不列入逻辑推理的内容。
明明所知道的是,他的同学中有 N 个人始终说假话,其余的人始终说真。
现在,明明需要你帮助他从他同学的话中推断出谁是真正的凶手,请记住, 凶手只有一个!   
【输入格式】
输入由若干行组成,第一行有二个整数, M ( 1≤M≤20 )、 N ( 1≤N≤M )和 P ( 1≤P≤100 );
M 是参加游戏的明明的同学数, N 是其中始终说谎的人数, P 是证言的总数。接下来 M 行,
每行是明明的一个同学的名字(英文字母组成,没有主格,全部大写)。
往后有 P 行,每行开始是某个同学的名宇,紧跟着一个冒号和一个空格,后面是一句证词,符合前表中所列格式。证词每行不会超过 250 个字符。
输入中不会出现连续的两个空格,而且每行开头和结尾也没有空格。
【输出格式】
如果你的程序能确定谁是罪犯,则输出他的名字;如果程序判断出不止一个人可能是罪犯,则输出 Cannot Determine ;如果程序判断出没有人可能成为罪犯,则输出 Impossible 。
【输入样例】
3 1 5
MIKE
CHARLES
KATE
MIKE:I am guilty.
MIKE:Today is Sunday.
CHARLES:MIKE is guilty .
KATE:I am guilty.
KATE:How are you??
【输出样例】
MIKE
我不需要言者无罪,我需要的是说出的每一句话都必须承担责任。

名侦探

533

主题

0

好友

460

积分

 

升级
71%
帖子
2408
精华
4
积分
460
威望
317
RP
297
金钱
196 柯币
人气
2733 ℃
注册时间
2004-7-14
沙发
发表于 2006-10-25 19:20:18 |只看该作者

回复: 信息学奥赛试题里也有柯南

大概能看懂,汗一个
回复

使用道具 举报

推理爱好者

1

主题

0

好友

97

积分

 

升级
43%
帖子
535
精华
0
积分
97
威望
65
RP
67
金钱
128 柯币
人气
285 ℃
注册时间
2005-9-27
板凳
发表于 2006-10-25 21:41:18 |只看该作者

回复: 信息学奥赛试题里也有柯南

罪犯要是都那么好找柯南早就下岗了
回复

使用道具 举报

推理游戏区荣誉版主
资源情报科成员
广播站站长
事务所分流组成员

81

主题

44

好友

8813

积分

 

昵称
嘉要当高智商圣母
帖子
5673
精华
12
积分
8813
威望
2336
RP
16050
金钱
61369 柯币
人气
2004 ℃
注册时间
2003-10-18

M13票房保卫战功臣

地板
发表于 2006-10-26 11:43:35 |只看该作者

回复: 信息学奥赛试题里也有柯南

电脑侦探的诞生……汗一个……
这个也可以编程,就没有什么不能的了~
贝>迷>瞳>通>世>战>沉>水>引>漆>银>侦>天>绀>第>第
回复

使用道具 举报

东之工藤

0

主题

0

好友

868

积分

 

升级
84%
帖子
2862
精华
16
积分
868
威望
397
RP
1105
金钱
617 柯币
人气
0 ℃
注册时间
2004-8-11
5
发表于 2006-10-27 19:31:31 |只看该作者

回复: 信息学奥赛试题里也有柯南

晕到^
我们刚刚在玩杀人游戏^
回复

使用道具 举报

杯户中学生

0

主题

0

好友

2

积分

 

升级
3%
帖子
39
精华
0
积分
2
威望
0
RP
5
金钱
10 柯币
人气
0 ℃
注册时间
2005-6-5
6
发表于 2006-10-27 20:30:04 |只看该作者

回复: 信息学奥赛试题里也有柯南

数组记录
用字符串分析各人的话,然后逐一尝试
尝试的次数为:在M中取N的组合
对否?
回复

使用道具 举报

最后的银色子弹

日语教室杂役

28

主题

55

好友

7210

积分

 

昵称
Carpe diem
帖子
97655
精华
7
积分
7210
威望
3189
RP
7611
金钱
28229 柯币
人气
2769 ℃
注册时间
2003-11-15
7
发表于 2006-10-27 22:35:38 |只看该作者

回复: 信息学奥赛试题里也有柯南

………………
--好高深啊 几乎就没看懂啥
回复

使用道具 举报

资源情报科实习成员

2

主题

0

好友

1

积分

 

昵称
Cauchy
帖子
96
精华
0
积分
1
威望
0
RP
0
金钱
2 柯币
人气
841 ℃
注册时间
2005-8-27
8
发表于 2006-10-28 14:20:16 |只看该作者

回复: 信息学奥赛试题里也有柯南

这里也有
http://www.vijos.cn/Problem2.asp?Series=柯南之Vijos被黑事件
回复

使用道具 举报

资源情报科实习成员

2

主题

0

好友

1

积分

 

昵称
Cauchy
帖子
96
精华
0
积分
1
威望
0
RP
0
金钱
2 柯币
人气
841 ℃
注册时间
2005-8-27
9
发表于 2006-10-28 14:22:22 |只看该作者

回复: 信息学奥赛试题里也有柯南

[quote=ping]数组记录
用字符串分析各人的话,然后逐一尝试
尝试的次数为:在M中取N的组合
对否?[/quote]
标程
program NOIP2003_2_Logic;
  const
    maxm=20;
    dow:array[1..7]of string=('Sunday.','Monday.','Tuesday.','Wednesday.',
    'Thursday.','Friday.','Saturday.');
  var
    i,j,k,weekday,m,n,p,p1,p2,p3,index,resolution,total1,total2:byte;
    name:array[1..maxm]of string;
    witness10,witness20:array[1..100]of byte;
    witness1,witness2:array[1..100]of string;
    name0,temp,temp0,temp1,temp2:string;
    truth,truth0:array[1..maxm]of byte;
    f1,f2:text;fn1,fn2,fileNo:string;
    flag:boolean;
  begin
    write('Input fileNo:');readln(fileNo);
    fn1:='logic.in'+fileNo;fn2:='logic.ou'+fileNo;
    assign(f1,fn1);reset(f1);assign(f2,fn2);rewrite(f2);
    readln(f1,m,n,p);
    for i:=1 to m do readln(f1,name);
    total1:=0;total2:=0;
    for i:=1 to p do begin
      readln(f1,temp);
      index:=pos(': ',temp);
      temp1:=copy(temp,1,index-1);
      temp2:=copy(temp,index+2,length(temp)-index-1);
      if (temp2='I am guilty.') or (temp2='I am not guilty.') then
        for j:=1 to m do
          if name[j]=temp1 then begin
            inc(total1);
            witness10[total1]:=j;
            witness1[total1]:=temp2;
            break;
          end;
      if (pos(' is guilty.',temp2)>0) or (pos(' is not guilty.',temp2)>0) then begin
        temp0:=copy(temp2,1,pos(' is ',temp2)-1);
        flag:=false;
        for k:=1 to m do
          if temp0=name[k] then begin
            flag:=true;
            break;
          end;
        if flag then
          for j:=1 to m do
            if name[j]=temp1 then begin
              inc(total1);
              witness10[total1]:=j;
              witness1[total1]:=temp2;
              break;
            end;
      end;
      flag:=false;
      for j:=1 to 7 do
        if temp2='Today is '+ dow[j] then begin
          flag:=true;
          break;
        end;
      if flag then
        for j:=1 to m do
          if name[j]=temp1 then begin
            inc(total2);
            witness20[total2]:=j;
            witness2[total2]:=temp2;
            break;
          end;
    end;
    close(f1);
    resolution:=0;
    for i:=1 to m do begin
      if resolution>1 then break;
      fillchar(truth,sizeof(truth),0);
      for j:=1 to total1 do begin
        if witness1[j]='I am guilty.' then begin
          if i=witness10[j] then
            case truth of
              0:truth:=1;
              2:truth:=3;
            end
          else
            case truth[witness10[j]] of
              0:truth[witness10[j]]:=2;
              1:truth[witness10[j]]:=3;
            end;
        end;
        if witness1[j]='I am not guilty.' then begin
          if i=witness10[j] then
            case truth of
              0:truth:=2;
              1:truth:=3;
            end
          else
            case truth[witness10[j]] of
              0:truth[witness10[j]]:=1;
              2:truth[witness10[j]]:=3;
            end;
        end;
        if (pos(' is guilty.',witness1[j])>0) then begin
          temp:=copy(witness1[j],1,pos(' is guilty.',witness1[j])-1);
          if name=temp then
            case truth[witness10[j]] of
              0:truth[witness10[j]]:=1;
              2:truth[witness10[j]]:=3;
            end
          else
            case truth[witness10[j]] of
              0:truth[witness10[j]]:=2;
              1:truth[witness10[j]]:=3;
            end;
        end;
        if (pos(' is not guilty.',witness1[j])>0) then begin
          temp:=copy(witness1[j],1,pos(' is not guilty.',witness1[j])-1);
          if name=temp then
            case truth[witness10[j]] of
              0:truth[witness10[j]]:=2;
              1:truth[witness10[j]]:=3;
            end
          else
            case truth[witness10[j]] of
              0:truth[witness10[j]]:=1;
              2:truth[witness10[j]]:=3;
            end;
        end;
      end;
      if total2>0 then begin
        for k:=1 to m do truth0[k]:=truth[k];
        for weekday:=1 to 7 do begin
          for k:=1 to m do truth[k]:=truth0[k];
          for j:=1 to total2 do
            if pos(dow[weekday],witness2[j])>0 then
              case truth[witness20[j]] of
                0:truth[witness20[j]]:=1;
                2:truth[witness20[j]]:=3;
              end
            else
              case truth[witness20[j]] of
                0:truth[witness20[j]]:=2;
                1:truth[witness20[j]]:=3;
              end;
          p1:=0;p2:=0;p3:=0;
          for k:=1 to m do if truth[k]=1 then inc(p1);
          for k:=1 to m do if truth[k]=2 then inc(p2);
          for k:=1 to m do if truth[k]=3 then inc(p3);
          if (p1<=m-n) and (p2<=n) and (p3=0) then begin
            name0:=name;
            inc(resolution);
            break;
          end;
        end;
      end;
      p1:=0;p2:=0;p3:=0;
      for k:=1 to m do if truth[k]=1 then inc(p1);
      for k:=1 to m do if truth[k]=2 then inc(p2);
      for k:=1 to m do if truth[k]=3 then inc(p3);
      if (p1<=m-n) and (p2<=n) and (p3=0) and (name0<>name) then begin
        name0:=name;
        inc(resolution);
      end;
    end;
    if resolution=1 then writeln(f2,name0);
    if resolution=0 then writeln(f2,'Impossible');
    if resolution>1 then writeln(f2,'Cannot Determine');
    close(f2);
  end.
回复

使用道具 举报

杯户大学生

0

主题

0

好友

67

积分

 

升级
68%
帖子
1925
精华
0
积分
67
威望
43
RP
11
金钱
23 柯币
人气
0 ℃
注册时间
2004-7-9
10
发表于 2006-10-28 15:13:53 |只看该作者

回复: 信息学奥赛试题里也有柯南

:65: 彻底晕掉了。。。。。。。。
爱丽丝迷失在花园,兔子先生鞠躬微笑。 我的爱丽丝至今还在梦里转圈,等谁出现,等谁永远。 那么就让航程没有终点。梦的轨迹纷纷陷落。 我的梦里持续着绵长的爱,临到肩,临到眼,飞成诗句。 依然不想醒来.........
回复

使用道具 举报

侦探助理

25

主题

0

好友

162

积分

 

升级
70%
帖子
861
精华
2
积分
162
威望
105
RP
121
金钱
8 柯币
人气
136 ℃
注册时间
2006-7-20
11
发表于 2006-10-28 18:12:30 |只看该作者

回复: 信息学奥赛试题里也有柯南

9楼从哪找来的?
回复

使用道具 举报

杯户小学生

0

主题

0

好友

0

积分

 

升级
0%
帖子
23
精华
0
积分
0
威望
0
RP
0
金钱
0 柯币
人气
24 ℃
注册时间
2004-8-19
12
发表于 2006-10-28 18:19:49 |只看该作者

回复: 信息学奥赛试题里也有柯南

[quote=SWA]9楼从哪找来的?[/quote]
复赛试题一般到处都有解答。。。。。。。。。这是NOIP2003第二题
回复

使用道具 举报

侦探助理

25

主题

0

好友

162

积分

 

升级
70%
帖子
861
精华
2
积分
162
威望
105
RP
121
金钱
8 柯币
人气
136 ℃
注册时间
2006-7-20
13
发表于 2006-10-28 18:19:53 |只看该作者

回复: 信息学奥赛试题里也有柯南

[QUOTE=LG_Cauchy]这里也有
http://www.vijos.cn/Problem2.asp?Series=柯南之Vijos被黑事件[/QUOTE]
都成一个系列了……作者真是强……
转一道题
CoVH之柯南购物
话说柯南开完锁后,本想继续往里走,但是却接到一个电话,原来小哀打电话叫柯南去买衣服(寒)
柯南来到步行街,发现衣服就如同它的价格一样漂亮(暴寒),柯南自然不想买这么贵的衣服,他想从买到的衣服总是比上一件便宜,但他又想小哀开心,于是他想尽量买到最多的衣服。你能帮帮他吗?
注:步行街从头到尾有n件商品,每件商品只有一件,柯南不能回头购买。

(又及:到后来,柯南进入OIBH总部后,才发现是12+5鼓动了小哀叫柯南买衣服,并且柯南看到12+5时12+5中的鱼牛正拿着个手机阴笑着,柯南一听,是小哀……于是,柯南侦察OIBH组织总部的计划完全失败,下一次又是什么呢?

输入格式 Input Format  
   输入第一行是n(1<=n<=2000),表示步行街上里有n件衣服
以下n行是步行街每件商品的价格,按顺序从头到尾。  
   
   
输出格式 Output Format  
   输出第一行是柯南能购买的最多的商品数,接着是一个空格,再接着是柯南购买商品的方案数除以10000的余数。
我不需要言者无罪,我需要的是说出的每一句话都必须承担责任。
回复

使用道具 举报

杯户中学生

0

主题

0

好友

36

积分

 

升级
90%
帖子
830
精华
0
积分
36
威望
20
RP
19
金钱
184 柯币
人气
564 ℃
注册时间
2003-12-23
14
发表于 2006-10-28 20:35:59 |只看该作者

回复: 信息学奥赛试题里也有柯南

感觉就像变装的编程嘛~~~~
回复

使用道具 举报

杯户中学生

0

主题

0

好友

4

积分

 

升级
8%
帖子
364
精华
0
积分
4
威望
0
RP
1
金钱
5 柯币
人气
82 ℃
注册时间
2006-9-19
15
发表于 2006-10-30 11:45:37 |只看该作者

回复: 信息学奥赛试题里也有柯南

暴汗:029: !!!大老们放过我吧~~~~有没有简单点的,:65:
Need Not To Know!!!
忙里偷闲泡论坛,也能从小学毕业~!
现在是中学生了,哇卡卡~~~~~!
加油中国~!
回复

使用道具 举报

杯户中学生

2

主题

0

好友

39

积分

 

升级
97%
帖子
343
精华
0
积分
39
威望
0
RP
90
金钱
96 柯币
人气
428 ℃
注册时间
2005-7-11
16
发表于 2006-10-30 20:48:24 |只看该作者

回复: 信息学奥赛试题里也有柯南

楼主找到了一个让大家晕菜的理由,哈哈,大致能懂,我是学数学的,呵呵
回复

使用道具 举报

见习侦探

1

主题

0

好友

204

积分

 

升级
30%
帖子
1223
精华
1
积分
204
威望
153
RP
96
金钱
99 柯币
人气
1069 ℃
注册时间
2005-3-11
17
发表于 2006-10-31 13:03:35 |只看该作者

回复: 信息学奥赛试题里也有柯南

答案是用C语言编的吗?
回复

使用道具 举报

杯户大学生

0

主题

0

好友

53

积分

 

升级
33%
帖子
759
精华
0
积分
53
威望
5
RP
102
金钱
209 柯币
人气
683 ℃
注册时间
2005-10-15
18
发表于 2006-11-1 17:04:41 |只看该作者

回复: 信息学奥赛试题里也有柯南

晕载,完全看不懂
回复

使用道具 举报

杯户中学生

0

主题

0

好友

16

积分

 

升级
38%
帖子
296
精华
0
积分
16
威望
10
RP
8
金钱
24 柯币
人气
938 ℃
注册时间
2005-5-16
19
发表于 2006-11-2 12:19:31 |只看该作者

回复: 信息学奥赛试题里也有柯南

完全晕倒,看了6遍才大概看懂
回复

使用道具 举报

杯户中学生

0

主题

0

好友

23

积分

 

升级
56%
帖子
296
精华
0
积分
23
威望
0
RP
50
金钱
100 柯币
人气
194 ℃
注册时间
2003-2-11
20
发表于 2006-11-2 20:12:35 |只看该作者

回复: 信息学奥赛试题里也有柯南

program 开头的肯定不是c语言嘛
我们现在学的c语言都是#include<stdio.h>当函数头的
记得以前学的pascal(是这么拼吗)等等是这样的
是不是初中高中的信息学奥赛啊
强大的孩子们
不过这种让人晕菜的东西
我上大学以后居然是必修的
下周c语言程序设计考试
上帝保佑
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 新浪微博登陆

手机版|Archiver|名侦探柯南事务所 ( 沪ICP备17027512号 )

GMT+8, 2024-9-21 04:39 , Processed in 0.050113 second(s), 32 queries , MemCached On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部