第一题: 盾盾的打字机 (drdrd) 
【题目描述】 
盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章。 
由于有了上次的经验,盾盾预先准备好了一段模板 A 存在了内存中,并以此为基础来 
打出文章 B。盾盾每次操作可以将内存中的某一个字符改成另一个字符,或者在某一个位置 
插入一个字符,或者删除某一个位置上的字符。另外,为了避免自己预存的模板太腿反而浪 
费时间,盾哥在所有操作之前会斟酌一下选择留下模板 A 的某一个最优的子串以保证操作 
次数尽量少(当然盾盾也可以全保留或一个都不留),这一步不计入操作次数。 
试求盾盾要打出文章 B 的最少操作次数。 
子串是指母串中连续的一段。 
【输入数据】 
输入包含多组数据。 
对于每组数据,两行,分别表示 A 和 B。 
【输出数据】 
每组数据一行,一个数,表示最少操作次数。 
【输入样例】 
aaaaa 
aaa 
abcabc 
bcd 
abcdef 
klmnopq 
【输出样例】 
0 1 7 
【 数据约定】 
30% : |A|, |B| <= 10 
100% : 1 <= |A|, |B| <= 1000, 数据组数 <= 10, 输入的串中只包含小写字 

用状态 f[i][j]表示第一个串到了第 i 位,第二个串到了第 j 为的最优值,转移就枚举下一
位怎么做。
注意边界条件。

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;

typedef long long LL;

#define INF 0x7fffffff
#define MAXN 1010

int dp[MAXN][MAXN];

char a[MAXN],b[MAXN];

int lena,lenb;

int check(int x,int y)
{
if (x!=y)
return 1;
return 0;
}

bool work()
{
for (int i=0;i<=lena-lenb;i++)
if (strncmp(a+i,b,lenb)==0)
return true;
return false;
}

int main()
{
freopen("drdrd.in","r",stdin);freopen("drdrd.out","w",stdout);
while (scanf("%s",a)!=EOF)
{
memset(dp,127/3,sizeof(dp));
scanf("%s",b);
lena=strlen(a);
lenb=strlen(b);
if (lena>=lenb && work())
{
printf("0\n");
continue;
}
for (int i=0;i<=lena;i++)
{
dp[i][0]=0;
for (int j=0;j<=lenb;j++)
{
dp[i+1][j+1]=min(dp[i+1][j+1],dp[i][j]+check(a[i],b[j]));
dp[i+1][j]=min(dp[i+1][j],dp[i][j]+1);
dp[i][j+1]=min(dp[i][j+1],dp[i][j]+1);
}
}
int ans=INF;
for (int i=0;i<=lena;i++)
ans=min(ans,dp[i][lenb]);
printf("%d\n",ans);
}
return 0;
}

第二题:社交网络(netrd)
【题目描述】
给定一个 N 个点 M 条边的无向图,你要连最少的边使得图连通。求方案数 mod P 的值。
【输入数据】
第一行三个数, N,M,P。
接下来 M 行,每行两个数 x,y,表示 x 和 y 之间有一条边。
【输出数据】
仅一行, 一个数,即方案数。
【输入样例】
4 1 1000000000
1 4
【输出样例】
8
【样例解释】
{(1, 2), (1, 3)} {(1, 2), (2, 3)} {(1, 2), (4, 3)} {(1, 3), (3, 2)}
{(1, 3), (4, 2)} {(4, 2), (2, 3)} {(4, 2), (4, 3)} {(4, 3), (3, 2)}
【数据约定】
30% : N <= 10
另 20% : M = 0
100 : N <= 10 ^ 5, M <= 10 ^ 5, 1 <= P <= 10 ^ 9

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;

typedef long long LL;

#define N 100010

LL n,m,p;
LL ans;

int t;
int x,y;
int f[N],g[N];

int find(int x)
{
return f[x]==x ? x : f[x]=find(f[x]);
}

int PowerMod(int a, int b, int c)
{

LL ans=1;
LL k=a%c;
while (b)
{
if (b&1)
ans=1LL*ans*k%c;
b>>=1;
k=1LL*k*k%c;
}
return ans;
}

int main()
{
freopen("netrd.in","r",stdin);freopen("netrd.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&p);
if (!m)
{
LL ans=PowerMod(n,n-2,p);
printf("%lld\n",ans);
return 0;
}
for (int i=1;i<=n;i++)
f[i]=i;
for (int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
f[find(x)]=find(y);
}
for (int i=1;i<=n;i++)
g[find(i)]++,t+=(f[i]==i);
if (t==1)
{
printf("%d",1%p);
return 0;
}
LL ans=PowerMod(n,t-2,p);
for (int i=1;i<=n;i++)
if (g[i])
ans=1LL*ans*g[i]%p;
printf("%lld",ans);
return 0;
}

树的 prufer 编码
如果把一开始就连在一起的点缩在一起,我们相当于要求一个带“点权”的图的生成树
方案数。
用树的 prufer 编码来考虑。在 prufer 序列中,每个点的度数就是它在其中的出现次数+1,
而每个点的每个度数都可以分配给他真正包含的点中的任意一个,用 a 表示包含的点数,
d 表示度数,所以最后的方案数就是π (a[i] ^ d[i]),在序列中每次考虑往后加一个数,都
有∑d[i] = n 种选择,所以最后的答案就是 n ^ (n-2) * π (a[i])。

转载于:https://www.cnblogs.com/yangjiyuan/p/5320194.html

HNOI模拟 Day3.22相关推荐

  1. JZOJ 6481. 【GDOI2020模拟02.22】黎曼几何(矩阵乘法)

    JZOJ 6481. [GDOI2020模拟02.22]黎曼几何 题解 设fn,1f_{n,1}fn,1​和fn,2f_{n,2}fn,2​分别表示将nnn个硬币移动111格和222格的最小步数, 推 ...

  2. 【HNOI模拟By YMD】move

    Description 设P(n)为从(0,0)移动到点(n,0)的不同路径数目,移动的方式有以下三种:(x,y)->(x+1,y-1),(x,y)->(x+1,y),(x+y)-> ...

  3. JZOJ 5878. 【NOIP2018提高组模拟9.22】电路图 A

    Description nodgd 要画一个电路图. 这是一个很简单的电路图,所有的元件都是串联关系,从整体来看就是一个环状的结构.画电路图有很多要求,nodgd 为了画得好看就又添加了一些 额外的要 ...

  4. 【HNOI模拟By lyp】Day1

    1 xlk 1.1 题目描述 给定一棵大小为 n 的无根树,求满足以下条件的四元组 (a, b, c, d) 的个数: 1. 1 ≤ a < b ≤ n 2. 1 ≤ c < d ≤ n ...

  5. 【HNOI模拟By lyp】Day2

    1 toad 1.1 题目描述 有 n 个石子, A B 两人博弈, A 先手. A 首先取若干个石子(至少一个,不能取完),然后B和A 再轮流取石子,每次取的石子不能超过 axb ( x 表示上次取 ...

  6. JZOJ 4467【GDOI2016模拟4.22】数字方阵

    Description Anica 做了一个很奇怪的梦:她梦见了一个无限大的平板,平板上填着无限行和无限列的整数.有趣的是,每个整数在那神奇的平板上只出现有限的次数. 机智的Anica很快便发现了这其 ...

  7. JZOJ 4726. 【NOIP2016提高A组模拟8.22】种花

    Description 经过三十多个小时的长途跋涉,小Z和小D终于到了NOI现场--南山南中学.一进校园,小D就被花所吸引了(不要问我为什么),遍和一旁的种花园丁交(J)流(L)了起来. 他发现花的摆 ...

  8. JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码

    Description 在OI界存在着一位传奇选手--QQ,他总是以风格迥异的搞笑代码受世人围观 某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据 while 序列长度< n do { ...

  9. JZOJ 3886. 【长郡NOIP2014模拟10.22】道路维护

    Description 最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象成 ...

最新文章

  1. 送Datawhale限量红包封面啦!
  2. 超越ResNet:南开提出Res2Net,不增计算负载,性能全面升级!
  3. 睡眠好不在于8小时,关键是满足「睡眠周期」
  4. JavaWeb中的乱码解决方法总结
  5. 方法参数的值调用+引用调用+深浅拷贝
  6. 需求调研的方法及过程_培训需求调研方法
  7. java 反射 main_java – 通过反射访问main方法中的局部变量
  8. 【Python实例第1讲】交叉验证预测曲线的画法
  9. 我的MYSQL学习心得(九) 索引
  10. 流程图伪代码计算机语言,论文中伪代码怎么写
  11. 用Python制作核酸检测日历
  12. 人工智能项目商业价值,主要体现在哪几个方面?
  13. 《面试系列篇》——Java这些最基础的知识,你还记得多少?
  14. Tomcat部署多个Sring Boot项目时Unable To Register MBean Exception的一种解决方法
  15. 全世界应当普及的经典文章:另辟蹊径解读《心经》
  16. 如何判断软件质量的的好坏,软件质量的特征
  17. win7更新_Win7用户福音:微软集成更新的新版Windows 7镜像泄露
  18. 基于springboot+vue的商城系统(电商平台)(前后端分离)
  19. umi3.5微软的AD登录loginRedirect
  20. 远程桌面连接的开启,和借助内外网软件,实现外网PC手机远程控制内网电脑,详细图文教程

热门文章

  1. 四月森林火灾地震频发,感恩奋战在一线的最可爱的人
  2. 飞蚊症手术失败与Photostress Recovery
  3. 是否应该饮用酵素和自制的葡萄酒
  4. 我所经历的字节跳动面试
  5. 第五章functions.py中的交叉熵代码解释
  6. intellij行数输出限制
  7. ValueError: You are trying to load a weight file containing 12 layers into a model with 2 layers.
  8. 《机器学习》 周志华学习笔记第八章 集成学习(课后习题)python实现
  9. 华为手机EMUI换鸿蒙,华为手机3月全面切换鸿蒙 EMUI 11或为安卓内核绝唱
  10. 南方h5手簿求转换参数_工程之星、 gps操作、RTK求转换参数操作步骤