版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/svitter/article/details/24270265

本文出自:http://blog.csdn.net/svitter。转载请注明出处。

原题:点击打开链接

晨阳哥一同讨论了一下这个题目=
=最终在今晚AC了。

这个题目能够说是RSA加密算法的变种。。

考虑997是素数,那么符合欧拉定理。然后想到费马小定理 m ^ 996 MOD 997 = 1;

由于一般的RSA解密算法都是C^d mod 997 = m 这样的形式,苦思冥想了好久解密算法,仍然没有得到解决。

最后最终大彻大悟的明确:

呵呵,你想多了。。这个题目能够用打表过- -

要注意的问题:

1.加password与原码是要一一相应,在原码中已经标出。

2.计算MOD幂的时候使用二分算法,假设不使用必定超时(n 能够取到  10 ^ 9)。这个算法根据pow算法得出。

/*author : Vit/csdn
*from: http://blog.csdn.net/svitter
*if you love it, please show the original site*/ #include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; #define lln long long int char str[1000010];
char key[1001];
lln ch[127];
lln n;
lln ans, tt, temp; bool get(lln &c)
{
temp = c, ans = 1, tt = n;
while(tt)
{
if(tt &1)
ans = (ans * temp) % 997;
temp = temp * temp % 997;
tt = tt >> 1;
}
if(ch[c] == -1)
ch[c] = ans;
} bool init()
{
lln i;
memset(ch, -1, sizeof(ch));
memset(key, '\0', sizeof(key));
for(i = 32; i < 127; i++)
{
if(get(i))
continue;
else
return false;
} for(i = 32; i < 127; i++)
{
lln &tmp = ch[i];
if(key[tmp] == '\0')//检查码值同样的情况
key[ch[i]] = (char)i;
else
{
return false;
}
}
return true;
} void ace()
{
lln c, cur;
lln length;
lln i, l;
char temp[400000];
bool isstr;
cin >> c;
while(c--)
{
while(cin >> n)
{
memset(str, '\0', sizeof(str));
scanf("%s", str);
if(init())
{
l = 0;
isstr = 1;
//cout << key[590] << endl;
length = strlen(str);
for(i = 0; i < length; i += 3)
{
cur = (str[i]-'0') *100 + (str[i+1]-'0') * 10 + str[i+2] - '0';
if(key[cur] != '\0')//没有相应的翻译码
temp[l++] = key[cur];
else
{
isstr = false;
break;
}
}
if(isstr)
{
for(i = 0; i < l; i++)
cout << temp[i];
cout << endl;
}
else
{
cout << "No Solution" << endl;
}
}
else
{
cout << "No Solution" << endl;
}
}
}
} int main()
{
ace();
return 0;
}

sdut2165 Crack Mathmen (山东省第二届ACM省赛)的更多相关文章

  1. Shopping(山东省第一届ACM省赛)

    Shopping Time Limit: 1000MS Memory limit: 65536K 题目描述 Saya and Kudo go shopping together.You can ass ...

  2. [2011山东省第二届ACM大学生程序设计竞赛]——Identifiers

    Identifiers Time Limit: 1000MS Memory limit: 65536K 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?act ...

  3. Balloons(山东省第一届ACM省赛)

    Balloons Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Both Saya and Kudo like balloons ...

  4. Emergency(山东省第一届ACM省赛)

    Emergency Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Kudo’s real name is not Kudo. H ...

  5. 山东省第一届ACM省赛

      ID PID Title Accepted Submit A 2151 Phone Number 22 74 B 2159 Ivan comes again! 1 17 C 2158 Hello ...

  6. sdut 2165:Crack Mathmen(第二届山东省省赛原题,数论)

    Crack Mathmen Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  Since mathmen take securit ...

  7. [2011山东ACM省赛] Mathman Bank(模拟题)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sr19930829/article/details/24187925 Mathman Bank ni ...

  8. 山东ACM省赛历届入口

    山东省第一届ACM大学生程序设计竞赛 山东省第二届ACM大学生程序设计竞赛 山东省第三届ACM大学生程序设计竞赛 山东省第四届ACM大学生程序设计竞赛 山东省第五届ACM大学生程序设计竞赛 山东省第六 ...

  9. [2011山东ACM省赛] Sequence (动态规划)

    Sequence Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Given an integer number sequence ...

随机推荐

  1. 在 Confluence 6 中连接一个 LDAP 目录

    希望将 Confluence 连接到一个 LDAP 目录: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧的面板中单击 用户目录(User Di ...

  2. Jamie and Binary Sequence (changed after round) CodeForces - 916B (贪心)

    链接 大意: 求将n划分为k个2的幂的和, 且最大幂最小,字典序尽量大 比较简单的贪心练习题, 但放在div2的B题感觉偏难了..... 先只考虑最大幂最小, 首先注意到直接按n的二进制划分即可得到最 ...

  3. ubuntu安装环境软件全文档

    1,安装apace2: sudo apt-get install apache2 2谷歌浏览器的安装:sudo apt-get install  chromium-browser-dbg 3,国际版Q ...

  4. hdu 1024 最大M子段dp

    题目: Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

  5. oracle EBS grant 您不具有执行当前操作的足够权限。请与您的系统管理员联系。

    解决方式1: Set the profiles of the below three to 'None' 设置以下三个配置文件为无 FND_VALIDATION_LEVELFND 验证层 FND_FU ...

  6. Sql Server约束的学习一(主键约束、外键约束、唯一约束)

    一.约束的分类 1.实体约束 实体约束是关于行的,比如某一行出现的值不允许出现在其他行,例如主键约束. 2.域约束 域约束是关于列的,对于所有行,某一列有那些约束,例如检查约束. 3.参照完整性约束 ...

  7. UVALive 4168

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA08AAABMCAIAAAA6IBt+AAAgAElEQVR4nO1dybXjOg7tWJSK65yKxL

  8. 浅谈:当程序员的N多好处,逆袭高富师

    选择一份职业,除了要要分析有没有钱途外(为什么要选择 IT 行业,IT 业有多火爆你造吗?),还要平衡其他方面的利弊.有很多想进入这个行业的小伙伴问我,程序员到底有什么好处.看样子这是很多小伙伴关心的 ...

  9. java设计模式 略版

    <转> 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结 ...

  10. 配置ssh互信的一个小问题记录

    在我们安装集群软件时,经常需要配置机器之间的互信,每个人也有一套自己熟悉的方法. 但是在今天配置互信过程中,发现操作过程还是一样,但是就是不能互信,通过查找资料解决了,做一下记录. 我经常使用的方式: ...