题解 P6354 【[COCI2007-2008#3] TAJNA】

囧仙

2020-04-12 13:02:05

Solution

这里介绍用 C++ STL 中的 string 类型,头文件 `string` / `cstring`。 首先输入密文 $s$,$s$ 是一个 string 类型,要用 `iostream` 库中 `cin>>s` 输入流输入。 长度 $l$ 用 `cstring` 库中的 `.size()` 函数计算,因为要使 $r$ 尽可能大,则让 $r$ 从 $\sqrt{l}$ 开始,依次减一,直到 $l\bmod r=0$ 为止,这时,$c=\dfrac{l}{r}$。 使用数组 $a_{i,j}$ 存储矩阵,存储代码如下: ```cpp for(int i=1;i<=c;i++) for(int j=1;j<=r;j++) a[j][i]=s[tmp],tmp=tmp+1;//注意是a[j][i],tmp要+1 ``` 然后输出即可,完整代码: ```cpp #include <iostream> #include <cstring> #include <cmath> #include <cstdio> using namespace std; string s; int r,c; char a[110][110]; int main(){ cin>>s; int l=s.size(); for(int i=sqrt(l);i>0;i--){ if(l%i==0){r=i;c=l/i;break;} } int tmp=0; for(int i=0;i<c;i++) for(int j=0;j<r;j++) a[j][i]=s[tmp],tmp=tmp+1; for(int i=0;i<r;i++)//输出 for(int j=0;j<c;j++) cout<<a[i][j]; return 0; } ```