2016.3.22考试(HNOI难度)
T1 盾盾的打字机
盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章。
由于有了上次的经验,盾盾预先准备好了一段模板A存在了内存中,并以此为基础来打出文章B。盾盾每次操作可以将内存中的某一个字符改成另一个字符,或者在某一个位置插入一个字符,或者删除某一个位置上的字符。另外,为了避免自己预存的模板太腿反而浪费时间,盾哥在所有操作之前会斟酌一下选择留下模板A的某一个最优的子串以保证操作次数尽量少(当然盾盾也可以全保留或一个都不留),这一步不计入操作次数。
试求盾盾要打出文章B的最少操作次数。
子串是指母串中连续的一段。
这是一道字符串编辑距离的DP题,但是题目有特殊的要求,字符串可以在编辑之前删除前一段,或者删除后一段,也可以前后都删(留下模板A的某一个最优的子串)。
列出DP方程:f[i][j]表示a串的i位匹配到了b串的j位
f[i][j]=min{f[i-1][j-1]+(a[i]!=b[j]),f[i-1][j]+1,f[i][j-1]+1)
边界:
for(int i=0;i<=l1;i++) f[i][0]=0;//这表示了可以删除原串前面的一段(本来编辑距离边界中为f[i][0]=i)
for(int i=0;i<=l2;i++) f[0][i]=i;
答案还需要在f[0--l1][l2]中寻找//这表示了可以删除原串之前的一段.
AC代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
char a[1001],b[1001];
int i,j,k,x,n,m,f[1010][1010],l1,l2,ans;
int main()
{
while (scanf("%s%s",a+1,b+1)!=EOF)
{
l1=strlen(a+1); l2=strlen(b+1);
memset(f,127,sizeof(f));
for(int i=0;i<=l1;i++) f[i][0]=0;
for(int i=0;i<=l2;i++) f[0][i]=i;
for (i=1;i<=l1;i++)
for (j=1;j<=l2;j++)
f[i][j]=min(min(f[i-1][j-1]+(a[i]!=b[j]),f[i-1][j]+1),f[i][j-1]+1);
ans=0x7fffffff;
for (i=1;i<=l1;i++) ans=min(ans,f[i][l2]);
cout<<f[l1][l2]<<endl;
}
return 0;
}
T2 社交网络
给定一个N个点M条边的无向图,你要连最少的边使得图连通。求方案数mod P的值。
做这个题目需要知道一个叫做Purfer Sequence数列的神奇东西。在这个网站学习:http://www.cnblogs.com/zhj5chengfeng/archive/2013/08/23/3278557.html
知道了这个性质之后,我们即可以套用这个模板,自然的想到去用并查集维护一下连通块,并且将其标记为它的度数,就可以了。
AC代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <sstream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#define pb push_back
#define mp make_pair
#define ST begin()
#define ED end()
#define XX first
#define YY second
#define elif else if
#define foreach(i,x) for (__typeof((x).ST) i=(x).ST;i!=(x).ED;++i)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef vector<int> vci;
typedef vector<string> vcs;
typedef pair<int,int> PII;
const int N=1000005;
int n,m,mo;
int f[N],g[N];
int find(int x) {return (x==f[x])?x:f[x]=find(f[x]);}
int main()
{
freopen("netrd.in","r",stdin);
freopen("netrd.out","w",stdout);
scanf("%d%d%d",&n,&m,&mo);
for (int i=1;i<=n;++i) f[i]=i;
for (int i=0;i<m;++i)
{
int x,y;
scanf("%d%d",&x,&y);
f[find(x)]=find(y);
}
int ans=1%mo,t=0;
for (int i=1;i<=n;++i) ++g[find(i)],t+=(i==f[i]);
if (t==1)
{
cout<<1%mo<<endl;
return 0;
}
for (int i=1;i<=t-2;++i) ans=1LL*ans*n%mo;
for (int i=1;i<=n;++i) if (g[i])
ans=1LL*ans*g[i]%mo;
cout<<ans<<endl;
return 0;
}
T3
求带边权的树上的长度为L~R的中位数最大的路径(有多个中位数时取最大的那个)。路径的长度是指边的条数。
这个题目我现在还不会写!!!!需要用到点或者边的分治,加上二分。边分治再用上单调队列可以做到O(nLogn^2)的复杂度
2016.3.22考试(HNOI难度)的更多相关文章
- [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神
[官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...
- 2016 10 28考试 dp 乱搞 树状数组
2016 10 28 考试 时间 7:50 AM to 11:15 AM 下载链接: 试题 考试包 这次考试对自己的表现非常不满意!! T1看出来是dp题目,但是在考试过程中并没有推出转移方程,考虑了 ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- 3.27考试总结(hnoi难度)
1 duel1.1 DescriptionK·⁄¶("“uƒ¢y%¥§H5|+ (?1’m" ’m·ø?1§z<k§⁄k<⁄§lm?0,1,2...§zg ‹‰ª«mS ...
- 3.29考试(HNOI难度)
一. 城镇 [ town ] Memory Limit: 128 MB Time Limit : 1s Description 在 farmer land 上,有 N 个 farmer to ...
- 3.25考试(hnoi难度)----神奇的一日游
T1怕老婆 有一天hzy9819,来到了一座大城市拥有了属于他自己的一双滑板鞋.但是他还是不满足想要拥有属于自己的一栋楼,他来到了一条宽敞的大道上,一个一个记录着这些楼的层数以方便自己选择. hzy9 ...
- NIPS 2016上22篇论文的实现汇集
http://blog.csdn.net/jiandanjinxin/article/details/54087592 日前,LightOn CEO 兼联合创始人 Igor Carron 在其博客上放 ...
- OneZero第二次站立会议(2016.3.22)
会议时间:2016年3月22日 9:33~9:57 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论并修改. 会议内容:以下为会议插图 1.界面原型方面,小组成员对夏所画的 ...
- 2016 10 26考试 NOIP模拟赛 杂题
Time 7:50 AM -> 11:15 AM 感觉今天考完后,我的内心是崩溃的 试题 考试包 T1: 首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚 ...
随机推荐
- THE HANDLER_READ_* STATUS VARIABLES
Because I do a lot of Performance Tuning gigs I get often in contact with these status variables. In ...
- 坑爹的SQL ISNUMERIC
select ISNUMERIC('01,02') ISNUMERIC返回 1,后面用patindex代替了...折腾/ select patindex('%[^0-9]%','01,02')
- C# Driver LINQ Tutorial
1.介绍 该教程涵盖了1.8版本的C#驱动中的LINQ查询.你可能已经阅读最新的C# Driver Tutorial. 2.快速开始 首先,给程序添加下面的using声明 using MongoDB. ...
- rsync 只同步指定类型的文件
需求: 同步某个目录下所有的图片(*.jpg),该目录下有很多其他的文件,但只想同步*.jpg的文件. rsync 有一个--exclude 可以排除指定文件,还有个--include选项的作用正好和 ...
- WKWebView新特性及JS交互
引言 一直听说WKWebView比UIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章 ...
- MyCalView.php
<html> <head> <title>我的计算器</title> <script language="javascript" ...
- JavaScript push()和splice()方法
JavaScript push() 方法 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newele ...
- ACM题目————最长回文串
Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组cas ...
- ACM题目————The partial sum problem
描述 One day,Tom’s girlfriend give him an array A which contains N integers and asked him:Can you choo ...
- miniUI子窗口调父窗口方法
window.Owner.XXX 其中XXX是父窗口里的方法名