[ZOJ 1006] Do the Untwist (模拟实现解密)
2014-11-12 21:36
381 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6
题目大意:给你加密方式,请你求出解密。
直接逆运算搞,用到同余定理
题目大意:给你加密方式,请你求出解密。
直接逆运算搞,用到同余定理
#include <cstdio> #include <cstdlib> #include <string> #include <iostream> #include <cstring> #include <algorithm> #include <cctype> #include <vector> #include <map> #include <set> #include <iterator> #include <functional> #include <cmath> #include <numeric> using namespace std; typedef long long LL; typedef pair<int,int> PII; typedef vector<int> VI; #define PB push_back #define MP make_pair #define SZ size() #define CL clear() #define AA first #define BB second #define EPS 1e-8 #define ZERO(x) memset((x),0,sizeof(x)) const int INF = ~0U>>1; const double PI = acos(-1.0); int get_num(char c){ if( c=='_' ) return 0; if( c=='.') return 27; return c-'a'+1; } char get_char(int n){ if( n==0 ) return '_'; if( n==27 ) return '.'; return n+'a'-1; } int main(){ int k; while( scanf("%d",&k),k ){ char buff[100]; scanf("%s",buff); int plaincode[100],ciphercode[100]; ZERO(plaincode); ZERO(ciphercode); int n = strlen(buff); for(int i=0;i<n;i++){ ciphercode[i] = get_num(buff[i]); } for(int i=0;i<n;i++){ plaincode[(k*i)%n] = (ciphercode[i] + i)%28; } for(int i=0;i<n;i++){ putchar(get_char(plaincode[i])); } puts(""); } return 0; }
相关文章推荐
- ZOJ 1006 Do the Untwist 加密解密 模拟
- ZOJ1006 Do the Untwist
- ZOJ1006-Do the Untwist
- ZOJ 1006 Do the Untwist
- (ZJU-2006复试)-ZOJ-1006-Do the Untwist
- 浙大ZOJ 1006 Do the Untwist问题解决及其他人的解决方法
- ZOJ--1006:Do the Untwist
- 1006 Do the Untwist
- ZOJ 1006 Do the Untwist
- ACM-1006-Do the Untwist
- zoj&nbsp;1006&nbsp;Do&nbsp;the&nbsp;Untwist
- zoj 1006 Do the Untwist
- 杭电ACM1129——Do the Untwist~~解密 密文
- zoj 1006 Do the Untwist
- ZJU 1006 Do the Untwist
- zoj1006-Do the Untwist
- ZOJ Problem Set - 1006 Do the Untwist
- zoj 1006 Do the Untwist
- ZOJ 1006 Do the Untwist
- ZOJ 1006 Do the Untwist