百度之星2009第二场第一题(附个人写的一个程序,测试得91分)

1.Sorry,打错了(250分)

题目描述

龙先生是一位著名的记者,平时最喜欢报道一些鲜为人知的故事。最近,由于听说索马里海盗猖獗,他打算实地探访,做一个深入的调查。

龙先生联系了索马里当地的一些朋友,做了周密的计划——坐船从三亚出发,越过南海,趟过印度洋,最后到达索马里海域的亚丁湾。可就在船离海岸仅10公里时,突然一伙海盗突袭客船,所有人都被劫持到了索马里城内。

在人质被运送到“海盗基地”的途中,龙先生凭着多年的经验,乘海盗不注意,跃下了卡车,在无数砰砰的枪声中,没命的向外跑去。跑了几分钟后,龙先生突然看到一个电话厅。他迅速向电话厅奔去,想打电话向住在索马里的朋友求助。然而,随着追赶脚步声的临近,龙先生估算留给自己打电话的时间最多30秒,决不容许拨错电话。

遗憾的是,越是这种危机的时候,越容易犯错。身为“智者”的您,请帮龙先生算一算:当他打电话给一位朋友的时候,恰好打给了另外一个人(不一定是他朋友)的概率是多少?已知索马里是一个有不超过10万人的小城,电话号码只有6位。

输入格式

第1行:索马里人数n。n <= 100000

接下来的n行:所有人的电话号码

接下来的10行:一个10*10错按表,表示按a键时按成b键的概率(第一行第一列表示按0时按成0的概率,第一行第二列表示按0时按成1的概率。所有的概率用整数0~10表示,即实际概率要除以10)

下一行:索马里城中你的朋友人数m。m <= n。

接下来的m行:每个朋友的电话号码。

输出格式

打给你的每一个朋友时候,打通其他人的电话的概率(每行一个概率,乘以10^6 后用整数表示)

输入样例

5

267535

229127

693606

861879

902375

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

5

267535

229127

693606

861879

902375

输出样例

4

4

4

4

4

测试数据

共10个测试点,基本参数如下表:

 

测试点编号nm
1105
25025
3300100
420001000
580003000
63000010000
75000010000
810000020000
910000050000
10100000100000

 

 

 

#include <stdio.h>
#define MAX 100000
int main()
{
 int n,m,sum=0;
 int i=0,j;
 int g[10][10];
 char d_r[MAX][6];
 char d_f[MAX][6];
 scanf("%d",&n);
 while(i<n){
  scanf("%s",d_r[i]);
  i++;
 }
 for(i=0;i<10;i++)
  for(j=0;j<10;j++)
   scanf("%d",&g[i][j]);
 i=0;
 scanf("%d",&m);
 while(i<m){
  scanf("%s",d_f[i]);
  i++;
 }
 i=0;
 while(i<m){
  for(j=0;j<n;j++){
   sum+=g[d_f[i][0]-48][d_r[j][0]-48]*g[d_f[i][1]-48][d_r[j][1]-48]/
   *g[d_f[i][2]-48][d_r[j][2]-48]*g[d_f[i][3]-48][d_r[j][3]-48]/
   *g[d_f[i][4]-48][d_r[j][4]-48]*g[d_f[i][5]-48][d_r[j][5]-48];
  }
  sum-=g[d_f[i][0]-48][d_f[i][0]-48]*g[d_f[i][1]-48][d_f[i][1]-48]/
   *g[d_f[i][2]-48][d_f[i][2]-48]*g[d_f[i][3]-48][d_f[i][3]-48]/
   *g[d_f[i][4]-48][d_f[i][4]-48]*g[d_f[i][5]-48][d_f[i][5]-48];
  printf("%d/n",sum);
  sum=0;
  i++;
 }
 return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值