codevs 1376 帕秋莉•诺蕾姬
2016-10-21 07:23
232 查看
codevs 1376 帕秋莉•诺蕾姬
题目描述 Description
在幻想乡,帕秋莉•诺蕾姬是以宅在图书馆闻名的魔法使。这一天帕秋莉又在考虑如何加
强魔法咒语的威力。帕秋莉的魔法咒语是一个仅有大写字母组成的字符串,我们考虑
从’A’到’Z’分别表示0到25的数字,于是这个魔法咒语就可以看作一个26进制数
。帕秋莉通过研究发现,如果一个魔法咒语所代表的数能够整除10进制数M的话,就能
够发挥最大的威力。若当前的魔法咒语并不能整除M,帕秋莉只会将其中两个字符的位
置交换,尽量让它能够被M整除,当然由于某些咒语比较特殊,无论怎么改变都不能达
到这个目的。请你计算出她能否只交换两个字符就让当前咒语被M整除。(首位
的’A’为前导0) 第1行:1个字符串,长度不超过L。 第2行:1个正整数,M 第1行:
用空格隔开的2个整数,输出时先输位置靠前的那个。 如果存在多种交换方法,输出字
典序最小的,比如1 3和1 5都可以达到目的,就输出1 3;1 3和2 4都行时也输出1 3。
注意字符串下标从左到右依次为1到L开始。如果初始魔法咒语已经能够整除M,输出”0
0”;若无论如何也不能到达目的输出”-1 -1”。 PATCHOULI 16 4 9 对于30%的数
据:1 <= L <= 10, 1 <= M <= 100 对于50%的数据:除前面30%外,1 <= L <=
500, M = 5或25或26 对于100%的数据:1 <= L <= 2,000, 1 <= M <= 200,000
输入描述 Input Description
第1行:1个字符串,长度不超过L。 第2行:1个正整数,M
输出描述 Output Description
第1行:用空格隔开的2个整数,输出时先输位置靠前的那个。 如果存在多种交换方法,输出字典序最小的,比如1 3和1 5都可以达到目的,就输出1 3;1 3和2 4都行时也输出1 3。注意字符串下标从左到右依次为1到L开始。如果初始魔法咒语已经能够整除M,输出”00”;若无论如何也不能到达目的输出”-1-1”。
样例输入 Sample Input
PATCHOULI 16
样例输出 Sample Output
4 9
数据范围及提示 Data Size & Hint
对于30%的数据:1 <= L <= 10, 1 <= M <= 100 对于50%的数据:除前面30%外,1 <= L <= 500, M = 5或25或26 对于100%的数据:1 <= L <= 2,000, 1 <= M <= 200,000
思路:直接将26进制数暴力转成10进制数的话肯定是不可行的,所以我们可以考虑每次在转化的时候就 %m,并不会影响最终答案。交换的话从小到大枚举每两个数交换一下位置,满足条件输出就好了。
题解:
题目描述 Description
在幻想乡,帕秋莉•诺蕾姬是以宅在图书馆闻名的魔法使。这一天帕秋莉又在考虑如何加
强魔法咒语的威力。帕秋莉的魔法咒语是一个仅有大写字母组成的字符串,我们考虑
从’A’到’Z’分别表示0到25的数字,于是这个魔法咒语就可以看作一个26进制数
。帕秋莉通过研究发现,如果一个魔法咒语所代表的数能够整除10进制数M的话,就能
够发挥最大的威力。若当前的魔法咒语并不能整除M,帕秋莉只会将其中两个字符的位
置交换,尽量让它能够被M整除,当然由于某些咒语比较特殊,无论怎么改变都不能达
到这个目的。请你计算出她能否只交换两个字符就让当前咒语被M整除。(首位
的’A’为前导0) 第1行:1个字符串,长度不超过L。 第2行:1个正整数,M 第1行:
用空格隔开的2个整数,输出时先输位置靠前的那个。 如果存在多种交换方法,输出字
典序最小的,比如1 3和1 5都可以达到目的,就输出1 3;1 3和2 4都行时也输出1 3。
注意字符串下标从左到右依次为1到L开始。如果初始魔法咒语已经能够整除M,输出”0
0”;若无论如何也不能到达目的输出”-1 -1”。 PATCHOULI 16 4 9 对于30%的数
据:1 <= L <= 10, 1 <= M <= 100 对于50%的数据:除前面30%外,1 <= L <=
500, M = 5或25或26 对于100%的数据:1 <= L <= 2,000, 1 <= M <= 200,000
输入描述 Input Description
第1行:1个字符串,长度不超过L。 第2行:1个正整数,M
输出描述 Output Description
第1行:用空格隔开的2个整数,输出时先输位置靠前的那个。 如果存在多种交换方法,输出字典序最小的,比如1 3和1 5都可以达到目的,就输出1 3;1 3和2 4都行时也输出1 3。注意字符串下标从左到右依次为1到L开始。如果初始魔法咒语已经能够整除M,输出”00”;若无论如何也不能到达目的输出”-1-1”。
样例输入 Sample Input
PATCHOULI 16
样例输出 Sample Output
4 9
数据范围及提示 Data Size & Hint
对于30%的数据:1 <= L <= 10, 1 <= M <= 100 对于50%的数据:除前面30%外,1 <= L <= 500, M = 5或25或26 对于100%的数据:1 <= L <= 2,000, 1 <= M <= 200,000
思路:直接将26进制数暴力转成10进制数的话肯定是不可行的,所以我们可以考虑每次在转化的时候就 %m,并不会影响最终答案。交换的话从小到大枚举每两个数交换一下位置,满足条件输出就好了。
题解:
#include<iostream> #include<cstdio> using namespace std; int a[10005]; int main() { string x; cin>>x; int l=x.length(); int sum=0,m; a[l-1]=1; scanf("%d",&m); for(int i=l-1;i>=0;i--) { sum=((a[i]*(x[i]-'A')%m)+(sum%m))%m; a[i-1]=a[i]*26%m; } if(sum==0) { printf("0 0"); return 0; } for(int i=0;i<l;i++) { for(int j=i+1;j<l;j++) { if(((sum+(x[i]-'A')*(a[j]-a[i]+m))%m+(x[j]-'A')*(a[i]-a[j]+m)%m)%m==0)//加m是防止减出负数 { printf("%d %d",i+1,j+1); return 0; } } } printf("-1 -1"); return 0; }
相关文章推荐
- [CODEVS2603]公路修建
- codevs——T1576 最长严格上升子序列
- 【codevs1315】摆花 DP
- 修剪花卉(codevs 1794)
- vscode安装设置go
- 【codevs1286】【BZOJ1503】郁闷的出纳员,splay练习
- Car的旅行路线(codevs 1041)
- 【uoj #17】【codevs3729】【luogu1941】【NOIP2014】飞扬的小鸟
- codevs1219 骑士游历 棋盘型DP
- 1、Codevs 必做:2833、1002、1003、2627、2599
- 【学习笔记】在VSCode上配置typescript + nodejs 开发环境
- [转]拦截导弹类问题 (Codevs4888零件分组POJ1065Wooden Sticks)(LIS及其覆盖问题)
- codevs 1026 逃跑的拉尔夫 x
- 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组
- [codevs1046]旅行家的预算
- CODE[VS] 1287 矩阵乘法
- Codevs 1173 最优贸易
- vscode格式化代码无效--可能的解决方法
- VS2013 Cordova blank app command failed with exit code 8 error
- CODE[VS] 1670 无穷的序列 简单数论