nyist 303序号互换(数学推理)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=303
思路:
开始看错题了,以为最多只有两个字母。
字母转数字的表达式很容易看出来是:(26^(n-1))*(s[0]-64)+(26^(n-2))*(s[1]-64)+……
主要是数字怎么转字母,这应该是个数学问题。可是我想了好久没想出好方法,数学太差了吧。最好只好想个笨点的方法AC掉了。
我的方法:
用 mi[i][j]表示从后面数第i位上是字母j的最小值。
用 ma[i][j]表示从后面数第i位上是字母j的最大值。
(1<=i<10 1<=j<=26 j=1时,即‘A’)
例如: mi[3][4]="DAA"转成数字。 ma[3][4]="DZZ"转成数字。
这样算出来后,数字转字母,就可以从高位递归出字母来。
假设,给的数字是x。
如果mi[i][j]<=x<=ma[i][j],那么可以知道转化后的位数是i,且第i位是(char)(j+64);
根据前面推出的字母转数字的公式。
x-=(26^(i-1))*j
递归即可求出所有序列。
#include <iostream>
#include <string>
using namespace std;
long long ma[11][30],mi[11][30];
long long pow(int a,int b)
{
long long i=1,x=1;
while(i<=b) {x*=a; i++;}
return x;
}
long long zimu(string s)
{
long long x=0,n=s.length(),i;
for(i=0;i<n;i++)
{
x+=pow(26, n-i-1)*(s[i]-64);
}
return x;
}
void init()
{
int i,j,x,k; string s;
for(i=1;i<27;i++)
for(j=1;j<10;j++)
{
s=""; s+=char(64+i); k=1;
while(k<j) {s+='Z';k++;}
ma[j][i]=zimu(s); s=""; s+=char(64+i); k=1;
while(k<j) {s+='A'; k++;}
mi[j][i]=zimu(s);
//cout<<s<<":"<<mi[j][i]<<" "<<ma[j][i]<<endl;
}
}
void ans(long long x)
{
int i,j;
if(x<=26)
cout<<(char)(x+64)<<endl;
else
{
for(i=1;i<10;i++)
for(j=1;j<27;j++)
{
if(x>=mi[i][j]&&x<=ma[i][j])
{
cout<<(char)(j+64);
ans(x-pow(26,i-1)*j);
}
}
}
}
int main(int argc, char *argv[])
{
long long t,i,j,n,x;
string s;
init();
cin>>t;
while(t--)
{
cin>>s;
if(s[0]>='0'&&s[0]<='9')
{
for(x=i=0;i<s.length();i++)
{
x=x*10+(s[i]-'0');
}
ans(x);
}
else
{
cout<<zimu(s)<<endl;
}
}
return 0;
}
nyist 303序号互换(数学推理)的更多相关文章
- ACM 序号互换
序号互换 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来.单元格的行坐标是由数字 ...
- 第四届河南省ACM 序号互换 进制转换
序号互换 时间限制: 1 Sec 内存限制: 128 MB 提交: 41 解决: 19 [提交][状态][讨论版] 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐 ...
- 河南省第四届ACM省赛(T1) 序号互换
问题 A: 序号互换 时间限制: 1 Sec 内存限制: 128 MB难度1 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来.单元格的行坐标是由数字编 ...
- [河南省ACM省赛-第四届] 序号互换 (nyoj 303)
相似与27进制的转换 #include<iostream> #include<cstdio> #include<cstring> #include<strin ...
- hdu 5626 Clarke and points 数学推理
Clarke and points Problem Description The Manhattan Distance between point A(XA,YA) and B(XB,YB) i ...
- BZOJ1192 [HNOI2006]鬼谷子的钱袋 数学推理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1192 题意概括 把一个数m拆成很多数字. 问至少拆成多少个数字,1~m中的所有数字才可以用这些数字 ...
- HDU2552 三足鼎立 【数学推理】
三足鼎立 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- bzoj 1041 数学推理
原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1041 我们只需要求第一象限内(不包括坐标轴)的点数然后ans=ans*4+4就好了 首先我 ...
- CF988 D. Points and Powers of Two【hash/数学推理】
[链接]:CF [题意]:从一堆数中选一个最大子集,使得任意两个数相减的绝对值都是2的幂. [分析]:首先很难的一点,需要想到子集最多只能有三个,四个及以上的子集一定不存在(可以证明).当有三个元素时 ...
随机推荐
- [问题解决] /home目录占用率100%
今天发现一个比较奇怪的现象,linux系统下一个目录挂在存储下,df -Th 显示该目录使用率100%, du 该目录显示只用了2%, 后来发现是由于进程占用了被删掉的文件空间导致.举例如下: [ro ...
- API 设计: RAML、Swagger、Blueprint三者的比较
API设计工具中常常会拿RAML.Swagger.Blueprint这三种工具进行讨论比较,它们都是用来描述和辅助API开发的,只是它们之间的侧重有所不同. RAML RAML(RESTful API ...
- Spring 3.x企业实用开发实战(1)
有关Spring的介绍这里就不赘述了,主要是学习了陈雄华版的<Spring 3.x企业应用开发实战>并做了一点笔记,以助于后期的回顾和复习. 废话不多说,直接进入主题,以下所有代码基于&l ...
- nova availability zone
find a bug: at first there is only one zone. create aggregate host1 in zone1 create aggregate host1 ...
- MySQL存储过程的基本函数
(1).字符串类 CHARSET(str) //返回字串字符集 CONCAT (string2 [,... ]) //连接字串 INSTR (string ,substring ) //返回subst ...
- 关于 MyBatis MyBatis-Spring Jdbc 批量插入的各种比较分析
因为目前SME项目中编写了一套蜘蛛爬虫程序,所以导致插入数据库的数据量剧增.就项目中使用到的3种DB插入方式进行了一个Demo分析: 具体代码如下: 1: MyBatis 开启Batch方式,最普通的 ...
- 使用cmake安装mysql5.5.13
MySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. 安装cmake : tar zxvf ...
- 在struts2中整合ajax时出现Template /template/ajax/head.ftl not found错误时的处理方法
Struts2 Ajax出现错误“Template /template/ajax/head.ftl not found” 2013-02-08 18:26:27| 分类: 默认分类|字号 订阅 ...
- javascirpt语法
1.区分大小写 ECMAScript中的一切(变量.函数名和操作符)都区分大小写,而函数名不能使用typeof,因为它是一个关键字,但typeof则完全可以是一个有效的函数名. 2.标识符 指变量.函 ...
- 【JQ成长笔记】jQuery cookie的使用
jquery cookie挺好用的.简单实在.菜鸟都能用得上..额.文笔不好不好..咳咳.. 先来看看jq.cookie的aip 写入cookie $.cookie("this-cookie ...