LA-3716(sort的神用)
题意:
给出两条长度均为n的NDA链A和B,找出一段最长的字串[l,r]使得该区域的突变位置不超过p%;
思路:
sum[i]表示[1,i]中不相同的个数,可得表达式(sum[i]-sum[j])/(i-j)<=p/100;
变换一下就是100*sum[i]-p*i<=100*sum[j]-p*j;
求出100*sum[i]-p*i后按这个sort,sort后得到的序列中,如果排在前边的i(sort前的编号)比后边的大,那么就表示这两个就是一个合法序列;对于每个i,找到排在它后面的最小值就是它能形成的最长的合法序列,从后往前扫一遍,同时更新最小值和答案;
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack> using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++)
#define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p) {
if(!p) { puts("0"); return; }
while(p) stk[++ tp] = p%10, p/=10;
while(tp) putchar(stk[tp--] + '0');
putchar('\n');
} const LL mod=1e9+7;
const double PI=acos(-1.0);
const int inf=1e9;
const int N=15e4+10;
const int maxn=1e3+10;
const double eps=1e-6; int n,p;
char s1[N],s2[N];
struct node{
int sum,id;
}po[N];
int cmp(node x,node y)
{
if(x.sum==y.sum)return x.id>y.id;
return x.sum<y.sum;
}
int main()
{
while(1)
{
read(n);read(p);
if(!n&&!p)break;
scanf("%s",s1);
scanf("%s",s2);
po[0].sum=0;
For(i,0,n-1)
{
if(s1[i]!=s2[i])po[i+1].sum=po[i].sum+1;
else po[i+1].sum=po[i].sum;
}
For(i,1,n)po[i].sum=po[i].sum*100-p*i,po[i].id=i;
po[0].id=0;
sort(po,po+n+1,cmp);
int ans=0,temp=n+10;
for(int i=n;i>=0;i--)
{
if(po[i].id>temp)ans=max(ans,po[i].id-temp);
else temp=min(temp,po[i].id);
}
if(ans==0)cout<<"No solution."<<"\n";
else cout<<ans<<"\n";
}
return 0;
}
LA-3716(sort的神用)的更多相关文章
- Linux    sort  uniq 命令。简单运用
		-n #代表以数字方法排序,如果倒序加上-r -t ':' #-t指定分隔符-k ... 
- 数据结构(线段树):NOI 2016 区间
		[问题描述] [输入格式] [输出格式] [样例输入] 6 3 3 5 1 2 3 4 2 2 1 5 1 4 [样例输出] 2 [样例说明] [更多样例] 下载 [样例 2 输入输出] 见目录下的 ... 
- 主席树(BZOJ2653)
		考虑二分答案,设为k,将大于等于k的元素设为1,小于的设为-1,如果某一段的和>=0,说明这段的中位数>=k. 对于每组询问,二分完后查询新序列的最大子段和即可. 但是不能开n棵线段树,观 ... 
- 2016/12/22 dplの课练
		1.sort -nk 1 -t - 3 2.sort -nk 1 -t - 2 3.sort -nk 2 -t - 1 3./etc/passwd根据用户id的大小排序,从小到大的排序输出 sort ... 
- BZOJ 2754 【SCOI2012】 喵星球上的点名
		题目链接:喵星球上的点名 首先可以发现姓和名两个串就是逗你玩的.在两个串中间插入一个\(10001\),当成一个串做就可以了. 于是我们的问题转化为了: 有\(n\)个串\(A_1,A_2,\dots ... 
- BZOJ 1758 【WC2010】 重建计划
		题目链接:重建计划 这道题现在已经成为一道板子题了…… 这是个非常显然的0-1分数规划,可以二分答案之后树分治判定一下.注意树分治的时候如果使用单调队列,需要把所有儿子预先按最大深度排好序,否则会被扫 ... 
- Permute Digits 915C
		You are given two positive integer numbers a and b. Permute (change order) of the digits of a to con ... 
- 微软2014实习生及秋令营技术类职位在线测试(题目1 : String reorder)
		题目1 : String reorder 时间限制:10000ms 单点时限:1000ms 内存限制:256MB Description For this question, your program ... 
- hdu5792	 World is Exploding(多校第五场)树状数组求逆序对 离散化
		题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5792 题目描述:给你n个值,每个值用A[i]表示,然后问你能否找到多少组(a,b,c,d)四个编号,四 ... 
随机推荐
- Phantomjs和Casperjs,后台网页抓取和交互
			var casper = require('casper').create({ verbose: true, logLevel: 'debug', pageSettings: { loadImages ... 
- WAMP本地环境升级php版本
			!!!本次测试未完全成功,仅供提供经验. (1)下载php最新版本 http://windows.php.net/download/ (2)解压放到wamp/bin/php目录下 (3) 从已存在的p ... 
- hdu 4883
			简单题,当时竟然没有敲出来╮(╯▽╰)╭... 方法:每个时间点排序从小到大排序,之后扫一遍即可:是进的时间点就加人,反之出人.更新最大值即可....囧... #include<iostream ... 
- ****如何优雅的用Axure装逼?高保真原型心得分享
			本文核心内容点:- 啥是高保真原型?(附简单说明原型)- Axure可以画出什么水准的高保真?(给示例,开启装逼模式)- 高保真原型图技巧:- 啥时候上高保真?适用场景 and 不适用场景 啥是高保真 ... 
- Spring Boot集成Spring Data Reids和Spring Session实现Session共享
			首先,需要先集成Redis的支持,参考:http://www.cnblogs.com/EasonJim/p/7805665.html Spring Boot集成Spring Data Redis+Sp ... 
- Visual Studio VS如何统计代码行数
			编辑-查找和替换-在文件中查找,然后查找内容填写下面的东西,勾选使用正则表达式,点击查找全部 b*[^:b#/]+.*$ 在查找结果的最后一行显示了总的行数和文件数 ... 
- JAVA_MyEclipse如何加载Tomcat
			注意Tomcat不要放到Program Files这种有空格的路径下面!,下图所示是错误的 
- webpack4.0入门以及使用
			1. 安装webpack 先新建一个文件夹(demos),然后 npm init -y 新建一个package.json然后在当前目录执行webpack命令 webpack 模块未发现或者未找到src ... 
- 搭建企业内部DNS服务器,docker 部署内部 dnsmasq
			获取镜像 docker pull jpillora/dnsmasq 配置域名 # http://oss.segetech.com/intra/srv/dnsmasq.conf #log all dns ... 
- Odoo HR Payslip
			pay slip 可以录入多条 worked_days_line 和 input_line,用来人工调整薪资变动部分,比如销售提成,扣款等. pay slip 可以包含多个pay slip line ... 
