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难度)的更多相关文章

  1. [官方软件] 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 ...

  2. 2016 10 28考试 dp 乱搞 树状数组

    2016 10 28 考试 时间 7:50 AM to 11:15 AM 下载链接: 试题 考试包 这次考试对自己的表现非常不满意!! T1看出来是dp题目,但是在考试过程中并没有推出转移方程,考虑了 ...

  3. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  4. 3.27考试总结(hnoi难度)

    1 duel1.1 DescriptionK·⁄¶("“uƒ¢y%¥§H5|+ (?1’m" ’m·ø?1§z<k§⁄k<⁄§lm?0,1,2...§zg ‹‰ª«mS ...

  5. 3.29考试(HNOI难度)

    一. 城镇 [ town ]   Memory Limit: 128 MB    Time Limit : 1s Description 在 farmer land 上,有 N 个 farmer to ...

  6. 3.25考试(hnoi难度)----神奇的一日游

    T1怕老婆 有一天hzy9819,来到了一座大城市拥有了属于他自己的一双滑板鞋.但是他还是不满足想要拥有属于自己的一栋楼,他来到了一条宽敞的大道上,一个一个记录着这些楼的层数以方便自己选择. hzy9 ...

  7. NIPS 2016上22篇论文的实现汇集

    http://blog.csdn.net/jiandanjinxin/article/details/54087592 日前,LightOn CEO 兼联合创始人 Igor Carron 在其博客上放 ...

  8. OneZero第二次站立会议(2016.3.22)

    会议时间:2016年3月22日 9:33~9:57 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论并修改. 会议内容:以下为会议插图 1.界面原型方面,小组成员对夏所画的 ...

  9. 2016 10 26考试 NOIP模拟赛 杂题

    Time 7:50 AM -> 11:15 AM 感觉今天考完后,我的内心是崩溃的 试题 考试包 T1: 首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚 ...

随机推荐

  1. THE HANDLER_READ_* STATUS VARIABLES

    Because I do a lot of Performance Tuning gigs I get often in contact with these status variables. In ...

  2. 坑爹的SQL ISNUMERIC

    select ISNUMERIC('01,02') ISNUMERIC返回 1,后面用patindex代替了...折腾/ select patindex('%[^0-9]%','01,02')

  3. C# Driver LINQ Tutorial

    1.介绍 该教程涵盖了1.8版本的C#驱动中的LINQ查询.你可能已经阅读最新的C# Driver Tutorial. 2.快速开始 首先,给程序添加下面的using声明 using MongoDB. ...

  4. rsync 只同步指定类型的文件

    需求: 同步某个目录下所有的图片(*.jpg),该目录下有很多其他的文件,但只想同步*.jpg的文件. rsync 有一个--exclude 可以排除指定文件,还有个--include选项的作用正好和 ...

  5. WKWebView新特性及JS交互

    引言 一直听说WKWebView比UIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章 ...

  6. MyCalView.php

    <html> <head> <title>我的计算器</title> <script language="javascript" ...

  7. JavaScript push()和splice()方法

    JavaScript push() 方法 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newele ...

  8. ACM题目————最长回文串

    Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等   Input 输入有多组cas ...

  9. 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 ...

  10. miniUI子窗口调父窗口方法

    window.Owner.XXX 其中XXX是父窗口里的方法名