nyist 303序號互換 數學推理

2021-09-09 05:11:13 字數 915 閱讀 3462

思路:

開始看錯題了,以為最多只有兩個字母。

字母轉數字的表示式很容易看出來是:(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 #include using namespace std;

long long ma[11][30],mi[11][30];

long long pow(int a,int b)

return x;

}long long zimu(string s)

} }}int main(int argc, char *ar**)

{ 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

nyist 303 序號互換

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述dr.kong設計了乙個聰明的機械人卡多,卡多會對電子 中的單元格座標快速計算出來。單元格的行座標是由數字編號的數字序號,而列座標使用字母序號。觀察字母序號,發現第1列到第26列的字母序號分別為a,b,z,接著,第27列序號為aa...

303 序號互換

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 dr.kong設計了乙個聰明的機械人卡多,卡多會對 電子 中的單元格座標快速計算出來。單元格的行座標是由數字編號的數字序號,而列座標使用字母序號。觀察字母序號,發現第1列到第26列的字母序號分別為a,b,z,接著,第27列序號為...

南陽 303序號互換

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 dr.kong設計了乙個聰明的機械人卡多,卡多會對 電子 中的單元格座標快速計算出來。單元格的行座標是由數字編號的數字序號,而列座標使用字母序號。觀察字母序號,發現第1列到第26列的字母序號分別為a,b,z,接著,第27列序號為...