2019ccpc秦皇岛J MUV LUV EXTRA(KMP扩展)
Problem Description
鉴纯夏是一名成绩不太好的高中生。一天她在数学考试中碰到了一道求某条线段长度的问题。因为她并不会做这道题,所以她准确地作图后用尺子量出了这条线段的长度。不幸的是,答案在10进制下为一个无限小数,纯夏只量出了这个无限小数在10进制表示下的前若干位。
纯夏猜测问题的答案为一个有理数,所以答案为一个无限循环小数,如13=0.333⋯,3635=1.0285714285714⋯。纯夏希望从这个无限小数的前n位猜出原本的数字。纯夏意识到,猜测的循环节太长或循环节已经开始出现的部分长度太短是不可信的。举个例子,若她量出的小数为1.0285714285714,显然假设循环节为0285714285714(长度为13)或假设循环节为428571(已经开始出现的部分长度为7)都不如假设循环节为285714(长度为6,已经开始出现的部分长度为12)可靠。因此她定义一个循环节的可靠程度为a×循环节已经开始出现的部分长度−b×循环节长度。请你帮她求出最可靠的循环节的可靠程度为多少。
Input
第1行两个正整数a,b,含义如题目描述。
第2行一个字符串s表示纯夏量出的小数。
1≤a,b≤109
1≤|s|≤107
Hint
样例解释
对于第1组样例:
若猜测循环节为0,则可靠度=5×1−3×1=2;
其中,我们把以 0 为循环节的小数也看作无限循环小数。
若猜测循环节为20,则可靠度=5×2−3×2=4;
若猜测循环节为02,则可靠度=5×3−3×2=9;
若猜测循环节为020,则可靠度=5×3−3×3=6;
若猜测循环节为1020,则可靠度=5×4−3×4=8。
对于第2组样例:
若猜测循环节为2,则可靠度=2×1−1×1=1;
若猜测循环节为12,则可靠度=2×4−1×2=6;
若猜测循环节为21,则可靠度=2×3−1×2=4;
若猜测循环节为212,则可靠度=2×3−1×3=3;
若猜测循环节为1212,则可靠度=2×4−1×4=4。
注意,计算循环节可靠度的时候不考虑整数部分。输入中给出的整数部分只是为了还原纯夏见到的数字。
Output
一个整数表示最可靠的循环节的可靠程度。
Sample Input
5 3
1.1020
2 1
12.1212
Sample Output
9
6
求小数点后一段字符串的长度*a-这个字符串的循环节的长度*b,输出最大值。
把小数点后的数字倒置过来让从1长度开始枚举求最大值就行了。
现学KMP求next然后一开始卡ce,改好以后又卡了ll,以后一定注意开ll啊。
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<map>
#include<iomanip>
#include<math.h>
using namespace std;
typedef long long ll;
typedef double ld;
const ll INF=1e18;
ll a,b;
int i,j,k;
ll res;
char s[10000010];
char s1[10000010];
int Next[10000010];void getnext(char s[],int Next[])
{int q,k;int len=strlen(s);Next[0] = 0;for (q = 1,k = 0; q < len; ++q){while(k > 0 && s[q] != s[k])k = Next[k-1];if (s[q] == s[k]){k++;}Next[q] = k;}
}int main()
{while(~scanf("%lld%lld",&a,&b)){memset(Next,0,sizeof Next);getchar();gets(s1);int len1=strlen(s1);int len=0;for(i=len1-1; i>=0; i--){if(s1[i]=='.')break;s[len1-i-1]=s1[i];len++;}getnext(s,Next);ll ans=-INF;for(i=0; i<len; i++){res=a*(i+1)-b*(i+1-Next[i]);if(res>ans)ans=res;}printf("%lld\n",ans);}return 0;
}
2019ccpc秦皇岛J MUV LUV EXTRA(KMP扩展)相关推荐
- 39行代码AC_HDU-6740 2019CCPC秦皇岛 J MUV LUV EXTRA(KMP变形)
励志用少的代码做高效表达 Problem description One day, Kagami Sumika is stuck in a math problem aiming at calcula ...
- J. MUV LUV EXTRA (KMP求最小循环节)
原题链接 枚举后缀,KMP求每种后缀的最小循环节,更新最优解. #include <bits/stdc++.h> #define int long long using namespace ...
- J - MUV LUV EXTRA
J - MUV LUV EXTRA 思路: k m p kmp kmp. 求小数点后面的翻转字符串的循环节和循环长度. 注意循环节长度为1时,答案是 a − b a-b a−b. 时间复杂度: O ( ...
- 2019 CCPC 秦皇岛: MUV LUV EXTRA
MUV LUV EXTRA (本篇主要内容,kmp求最短循环节) 题目传送门: MUV LUV EXTRA 题意: 给你一个字符串和两个整数a和b.在小数点后,找到一个循环节 l,循环长度为p.求 a ...
- 2019CCPC秦皇岛 K MUV LUV UNLIMITED(思维博弈)
2019CCPC秦皇岛K 这个题感觉就是头脑风暴吧,关键在于抓住正确的方向想下去,我中间也跑偏了几次... 定义一个分支为从叶子往根的方向,不存在包含多个子节点的节点序列,即从叶子到包含多个子节点的节 ...
- 2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)
MUV LUV UNLIMITED Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- J - MUV LUV EXTRA(KMP)
感受 思 路 很 简 单 , 就 是 不 知 道 k m p 还 可 以 求 最 小 循 环 节 长 度 思路很简单,就是不知道kmp还可以求最小循环节长度 思路很简单,就是不知道kmp还可以求最小循 ...
- 2019秦皇岛CCPC J - MUV LUV EXTRA
题意:从一个小数的小数部分,计算下面式子的最大值 其中a和b是给定的参数,p是循环结已知的长度,l是循环结的长度 例如对于abab,p是4,l就是2 思路: 贪心的来说我们要让p更大,l尽可能小,所以 ...
- 2019 CCPC 秦皇岛 MUV LUV EXTRA kmp
传送门 枚举循环节已出现的长度 p,最优的循环节就是最后 p 个字 符构成的字符串的最短周期. 考虑把字符串倒过来,使用 kmp 可以求出每个前缀的最短 周期,即求出了原串每个后缀的最短周期. #in ...
最新文章
- 解析深度神经网络背后的数学原理!
- C#生成CHM文件(外篇使用hha.dll)
- 35岁以上的程序员们,后来都干什么去了?
- matlab gui学习手记_MATLAB论坛不可错过的30例GUI源代码
- 找了个学习uboot makefile的好地方 不过不让转载 那就把网址分享一下吧
- 网信办拟规定:平台未经用户同意不得强制订阅关注账号;Twitter回应大范围宕机;Krita 4.4.0发布|极客头条
- nginx的web基础
- dist包编译html_npm package开发指南-包内容篇
- RGB_LED,WS2811彩带驱动设计
- 中标麒麟linux界面设置ftp,中标麒麟下sambat和vsftp配置
- typedef用法,函数指针
- 趋势杀毒软件注意事项
- Easy Iot实现MQTT实验
- 用python对《三国演义》的人物出场进行统计
- 学长的白日梦C语言题目,bzoj4030【HEOI2015】小L的白日梦
- npm run build 打包报错primordials is not defined的解决方法
- Swift 标准库源码 第三方,Almofire,Kingfisher,SwiftyJson,KakaJson,单元测试 request
- loadClass,findClass,defineClass
- java基础 —— 集合、异常、反射、io流、多线程
- 计算机硬件基础与维修系列丛书,PC升级与维护大全(原书第12版附光盘)/计算机硬件基础与维修系列丛书...