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的幂. [分析]:首先很难的一点,需要想到子集最多只能有三个,四个及以上的子集一定不存在(可以证明).当有三个元素时 ...
随机推荐
- Spring包的方法WebUtils.getParametersStartingWith(request,String)
举个例子,比如页面上有 <input type="text" name="p_name" value="aileen"> < ...
- AndroidUI 视图动画-透明动画效果 (AlphaAnimation)
1.新建一个Android项目,Activity添加一个按钮如下代码: <Button android:id="@+id/btnAiphaAnimation" android ...
- Struts2五、Struts1与Struts2的区别
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...
- cf-公式专场
A. Again Twenty Five! time limit per test 0.5 seconds memory limit per test 64 megabytes input stand ...
- 关于MySQL的Myisam和Innodb的一些比较总结
总结一下MySQL的Myisam和Innodb引擎的一些差别,权当复习了. 首先二者在文件构成上: Myisam会存储三个文件:.frm 存储表结构,.MYD存储表的数据,.MYI文件存储表的索引:所 ...
- 当MVC4无法跳转时
//RedirectToAction("Index","首页"); //return View("首页/Index"); //Redirec ...
- Oracle 性能优化 — 统计数据收集[Z]
ORACLE优化器的优化方式有两大类,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为C ...
- [转]不用Cookie的“Cookie”技术
有另外一种比较隐蔽的用户追踪技术,不使用cookie或者Javascript.很多网站已经在用了,但知道的人不多.本文就来介绍一下这种技术是如何追踪用户,用户又该如何避免追踪. 这种技术不依赖于: C ...
- 安全的PHP代码编写准则
原文链接 绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...
- Git 系列(五):三个 Git 图形化工具
在本文里,我们来了解几个能帮你在日常工作中舒服地用上 Git 的工具. 我是在这许多漂亮界面出来之前学习的 Git,而且我的日常工作经常是基于字符界面的,所以 Git 本身自带的大部分功能已经足够我用 ...