noip1998 进位制表 (模拟)

A1119. 进位制表
时间限制: 1.0s   内存限制: 256.0MB  
总提交次数: 154   AC次数: 32   平均分: 27.60
将本题分享到:
       
   
试题来源
  NOIP1998 提高组
问题描述
  著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。 例如:

+
L
K
V
E
L
L
K
V
E
K
K
V
E
KL
V
V
E
KL
KK
E
E
KL
KK
KV


  其含义为:
  L+L=L,L+K=K,L+V=V,L+E=E
  K+L=K,K+K=V,K+V=E,K+E=KL ……
  E+E=KV



  根据这些规则可推导出:L=0,K=1,V=2,E=3
  同时可以确定该表表示的是4进制加法
输入格式
  输入包含n+1行,第一行为n(n≤9)表示以下表格的行数。
  以下n行,每行包括n个字符串,每个字串间用空格隔开。(字串仅有一个为‘+’号,其它都由大写字母组成)
输出格式
  程序输出:
  第一行为各个字母表示什么数,格式如:L=0 K=1 ……
  按大写字母字典序升序输出,格式为:大写字母+‘=’+数字+一个空格……。
  第二行为加法运算是几进制的,即一个整数k
  若不可能组成加法表,则应输出“ERROR!”

解析:摘自卢嘉铭
/*

这道题看似很难...

但是这里的测例非常简单...

首先没有ERROR例,另外进制都是十进制以内,所以可以非常简单地处理;

 

输入是标准的加法表,仅仅是大小顺序有改变,也即第一行和第一列都是0...r-1这r个数

所以只需要判断第一列中每一个字母对应的每行产生进位的个数,即是字母对应的数字,由于测例简单,只实现这部分就可以通过了


*/
vijos1596跟着道题是一样的,好像数据加强了。但是我看了vijos上面的题解讨论,发现与我理解的有很大不同,我也没找到vijos的数据(现在也不能骗数据了),对此,我只能表示理解题意不能,所以vijos上的这道题我就不浪费时间去想题意了(通过率仅仅13%,读题难的不在少数啊)。
这道题我实在清橙(http://www.tsinsen.com/A1119###)上提交通过的,上面的就是当年noip的原始数据。

代码:
#include<cstdio>
#include<cstring>
#define maxn 10
using namespace std;
int n,a[30];
char s[15][15][maxn];
int main()
{
 // freopen("1.in","r",stdin);
  int i,j,k;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
      scanf("%s",s[i][j]);  
  memset(a,90,sizeof(a));
  for(i=2;i<=n;i++)
    {
      for(k=0,j=2;j<=n;j++)
        if(strlen(s[i][j])>1)k++;
      a[s[i][1][0]-'A']=k;  
    }    
  for(k=0,i=0;i<26;i++)if(a[i]!=a[29])
    {
      printf("%c=%d ",'A'+i,a[i]);
      k++;
      if(k<n-1)printf(" ");
    }
  printf("\n%d\n",n-1);     
  return 0;
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值