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的幂. [分析]:首先很难的一点,需要想到子集最多只能有三个,四个及以上的子集一定不存在(可以证明).当有三个元素时 ...
随机推荐
- mac下配置java环境
1.tomcat配置 http://www.cnblogs.com/freeyiyi1993/p/3436368.html 2.下载eclipse和jdk安装 jdk去oracle网站下载
- 一步一步学习SignalR进行实时通信_4_Hub
原文:一步一步学习SignalR进行实时通信_4_Hub 一步一步学习SignalR进行实时通信\_4_Hub SignalR 一步一步学习SignalR进行实时通信_4_Hub 前言 创建Hub 配 ...
- docker 配置桥接网络
2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...
- Udacity-Artificial Intelligence for Robotics 课程笔记
Lesson 1 Localization 蒙特卡洛机器人定位模型 sense 贝叶斯模型 move 全概率公式 localization练习 # The function localize take ...
- 裸的单调队列-poj-2823-Sliding Window
题目链接: http://poj.org/problem?id=2823 题目意思: 给n个数,求连续区间长度为k的最大和最小值. 解题思路: 裸的单调队列不解释,用两个队列保存. 代码: #incl ...
- wikioi-1039-数的划分
将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序). dp[i][j]:把数i分成k分的方案数 则:dp[i][j]=sum(dp[i-j][t])(t>=1&&a ...
- Android 它们的定义View (一)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/24252901 非常Android入门程序员AndroidView.可能都是比較恐 ...
- C++顺序性容器、关联性容器与容器适配器
什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...
- 加密传输SSL协议1_OpenSSL的安装
终于在自己不断的奋斗之后,来到科大的一波考试过去了,但是为了不使自己过于放松,回顾一下之前的东西,做一下笔记.所以新开一个专题笔记: Using Apache with SSL 引入:首先我们在平时的 ...
- Android Fragment StartActivityForresult调用实例
fragment里面的onActivityResult 怎样才能被调用,很简单,就一句话, startActivityForResult(intent, getActivity().RESULT_FI ...