博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
帕秋莉·诺蕾姬 (Standard IO)
阅读量:5278 次
发布时间:2019-06-14

本文共 1378 字,大约阅读时间需要 4 分钟。

Description

  在幻想乡,帕秋莉·诺蕾姬是以宅在图书馆闻名的魔法使。这一天帕秋莉又在考虑如何加强魔法咒语的威力。帕秋莉的魔法咒语是一个仅有大写字母组成的字符串,我们考虑从’A’到’Z’分别表示0到25的数字,于是这个魔法咒语就可以看作一个26进制数。帕秋莉通过研究发现,如果一个魔法咒语所代表的数能够整除10进制数M的话,就能够发挥最大的威力。若当前的魔法咒语并不能整除M,帕秋莉只会将其中两个字符的位置交换,尽量让它能够被M整除,当然由于某些咒语比较特殊,无论怎么改变都不能达到这个目的。请你计算出她能否只交换两个字符就让当前咒语被M整除。(首位的’A’为前导0)

Input

  第1行:1个字符串,长度不超过L。

  第2行:1个正整数,M

Output

  第1行:用空格隔开的2个整数,输出时先输位置靠前的那个。

  如果存在多种交换方法,输出字典序最小的,比如1 3和1 5都可以达到目的,就输出1 3;1 3和2 4都行时也输出1 3。注意字符串下标从左到右依次为1到L开始。如果初始魔法咒语已经能够整除M,输出”0 0”;若无论如何也不能到达目的输出”-1 -1”。

题解

先预处理出26的0至2000的次方,因为题目问是否能整除M,所以可以在预处理时mod M。然后暴力每一种交换情况,即可。

代码

var  s:ansistring;  l,n:longint;  a,f:array [0..2001] of longint;procedure init;var  i,j,t:longint;begin  readln(s);  readln(n);  l:=length(s);  a[0]:=1;  for i:=1 to 1999 do    a[i]:=(a[i-1]*26) mod n;  for i:=1 to l do    begin      f[i]:=((ord(s[i])-65)*a[l-i]) mod n;      f[0]:=(f[0]+f[i]) mod n;    end;  if f[0]=0 then    begin      write('0 0');      halt;    end;end;procedure main;var  i,j,t,x,y:longint;begin  for i:=1 to l-1 do    begin      x:=ord(s[i])-65;      for j:=i+1 to l do        begin          y:=ord(s[j])-65;          t:=((x-y)*a[l-j]+(y-x)*a[l-i]) mod n;          if (f[0]+t) mod n=0 then            begin              write(i,' ',j);              halt;            end;        end;    end;end;begin  init;  main;  write('-1 -1');end.

转载于:https://www.cnblogs.com/zyx-crying/p/9319608.html

你可能感兴趣的文章
C++默认参数值函数
查看>>
java中的占位符\t\n\r\f
查看>>
7.14
查看>>
SDN2017 第一次作业
查看>>
MySQL通过frm 和 ibd 恢复数据过程
查看>>
AngularJs 学习笔记(2)
查看>>
关于元素优先级
查看>>
oo第一单元作业总结
查看>>
SRS源码——Listener
查看>>
web.xml 4.0 头
查看>>
Java面向对象抽象类案例分析
查看>>
100.Same Tree
查看>>
JAVA 根据经纬度算出附近的正方形的四个角的经纬度
查看>>
Linux系统配置matlab2009b
查看>>
ZH奶酪:基于ionic.io平台的ionic消息推送功能实现
查看>>
对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
查看>>
Thymeleaf模板格式化LocalDatetime时间格式
查看>>
庖丁解“学生信息管理系统”
查看>>
Pyltp使用
查看>>
Java8函数之旅 (七) - 函数式备忘录模式优化递归
查看>>