今天的题目一共拿了$180$分,感觉自己还是太菜了,二三两题只能骗到部分分

1、$String\ Master$

题目大意:有两个字符串,在允许k次失配的情况下,求最长公共子串的长度

没什么好讲,直接一个$O(n^3)$的解法就过了,数据范围很小,枚举公共子串在两个字符串的起点,在大于当前字符串长度或在大于$k$次失配后退出,更新答案。

话说卡常后拿了全站$rank1$

$Code\ Below:$

#include <bits/stdc++.h>
using namespace std;
int max(int a,int b){return a>b?a:b;} int main()
{
register int n,k,ans=0;
char s[310],t[310];
scanf("%d%d\n",&n,&k);
scanf("%s",s);
scanf("%s",t);
for(register int i=0;i<n;i++)
for(register int j=0;j<n;j++){
register int l,cur=0;
for(l=1;i+l<=n&&j+l<=n;l++){
cur+=(s[i+l-1]!=t[j+l-1]);
if(cur>k) break;
}
ans=max(ans,--l);
}
printf("%d\n",ans);
return 0;
}

  

我的得分:$100$

2、$Tourist\ Attraction$

题目大意:给定点数为$n$的无向图,求经过不重复的$a-b-c-d$的简单路径

$40$分做法:直接深搜

$70$分做法:枚举每一条边的$b-c$,然后$a,d$个数就可以用每个点的度数计算出来,所以$b-c$这条边对答案的贡献为$(dg[a]-1)*(dg[d]-1)$**(想想为什么减一?因为要除去b和c啊)**并减去环的个数
而环的个数恰恰是$70$分解法的瓶颈

$100$分做法:对于$70$分做法,定义所有边终点为$i$的起点集合为$S_i$,其实环的个数就是$card(S_a\cap S_d)$,所以$STL$中冷门数据结构$bitset$就登场了。交集的个数就是两者做与操作后位上$1$的个数

时间复杂度:$O(m*n/32)$

$Code\ Below:$

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=1500+10;
ll n,dg[maxn],edgex[maxn*maxn],edgey[maxn*maxn],tot,ans;
char s[maxn];
bitset<maxn> t,sum[maxn]; int main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
getchar();getchar();
for(ll j=1;j<=n;j++){
scanf("%c",&s[j]);
if(s[j]=='1'){
sum[i][j]=1;
edgex[++tot]=i,edgey[tot]=j;
dg[j]++;
}
}
}
for(ll i=1;i<=tot;i++){
ll x=edgex[i],y=edgey[i];
ans+=(dg[x]-1)*(dg[y]-1);
t=sum[x]&sum[y];
ans-=(ll)t.count();
}
printf("%lld\n",ans);
return 0;
}

趁这个机会学了一下$bitset$

我的得分:$40$

3、$Walk$

题目大意:

$40$分做法:直接$BFS$跑最短路

$Code\ Below:$

#include <bits/stdc++.h>
using namespace std;
int n,m,val[130010<<1],head[1300010<<1],fir[1300010<<1],cnt=1<<20,tot,dis[1300010<<1];
struct node {
int to,next,val;
} e[1300010<<1];
queue<int> q; inline void add(int x,int y,int w) {
e[++tot].to=y;
e[tot].val=w;
e[tot].next=head[x];
head[x]=tot;
}
inline void add1(int x,int y,int w) {
e[++tot].to=y;
e[tot].val=w;
e[tot].next=fir[x];
fir[x]=tot;
}
void add_point(int x,int dep)
{
if(dis[x]!=-1) return;
dis[x]=dep;q.push(x);
for(int i=head[x];i;i=e[i].next)
add_point(e[i].to,dep);
if(x<=cnt){
for(int i=0;i<=20;i++)
if(x&(1<<i)) add_point(x^(1<<i),dep);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&val[i]);
add(val[i],i+cnt,0);
add1(i+cnt,val[i],1);
}
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
if(x!=y) add1(x+cnt,y+cnt,1);
}
memset(dis,-1,sizeof(dis));
dis[1+cnt]=0;
while(!q.empty()) q.pop();
memset(dis,-1,sizeof(dis));
dis[1+cnt]=0;q.push(1+cnt);
while(!q.empty()){
int u=q.front();q.pop();
for(int i=fir[u];i;i=e[i].next){
if(dis[e[i].to]==-1){
q.push(e[i].to);
add_point(e[i].to,dis[u]+1);
}
}
}
for(int i=1;i<=n;i++)
printf("%d\n",dis[i+cnt]);
return 0;
}

  

我的得分:$40$

总结:在攻难题的同时,保证水题正确率$100$%

BZOJ NOIP提高组十连测第一场的更多相关文章

  1. 正睿 2018 提高组十连测 Day2 T2 B

    题目链接 http://www.zhengruioi.com/contest/84/problem/318 题解写的比较清楚,直接扒过来了. B 算法 1 直接按题意枚举,动态规划或是记忆化搜索. 时 ...

  2. 正睿OI提高组十连测 day1 总结

    可能是最简单的一场比赛了吧,结果却打得这么差... T1是个找规律题,结果一开始愚蠢地找错了规律,然后又对拍,到1h多一点才过掉 然后看t2和t3,以为t2是个水题,t3也只要处理一下就好了,先写t2 ...

  3. 正睿 2018 提高组十连测 Day4 T3 碳

    记'1'为+1,'0'为-1; 可以发现 pre[i],suf[i]分别为前/后缀和 a[i]=max(pre[l.....i]); b[i]=max(suf[i+1....r]); ans=max( ...

  4. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  5. NOIP提高组2004 合并果子题解

    NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...

  6. 1043 方格取数 2000 noip 提高组

    1043 方格取数  2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...

  7. [NOIP提高组2018]货币系统

    [TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...

  8. NOIP提高组初赛难题总结

    NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...

  9. 津津的储蓄计划 NOIp提高组2004

    这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...

随机推荐

  1. mybatis 为什么要设置jdbcType

    转载自:http://makemyownlife.iteye.com/blog/1610021 前天遇到一个问题 异常显示如下: 引用 Exception in thread "main&q ...

  2. python入门之文件处理

    1.读取文件 f=open(file="C:\BiZhi\新建文本文档.txt",mode="r",encoding="utf-8") da ...

  3. 棋盘问题(NOIP1997)

    题目链接:棋盘问题 这道题水不水呢?还是很水的,为什么?因为数据太小了.直接算就行了. #include<bits/stdc++.h> using namespace std; int m ...

  4. 如何使用GCC生成动态库和静态库

    根据链接时期的不同,库又有静态库和动态库之分.静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行.而动态库是在程序执行的时候被链接的.程序执行完,库仍需 ...

  5. 绩效沟通-BEST原则

    BEST原则指在进行绩效/IDP面谈的时候按照以下步骤进行: 案例:小赵经常在制作标书时候犯错误 Behavior description 描述行为 小赵,8月6日,你制作的标书,报价又出现了错误,单 ...

  6. mybatis分页插件Mybatis_PageHelper 简单案例

    源码地址(官网,文档) 使用条件: 支持mybatis 3.1.0+ sql 解析工具(jsqlparser.jar) 下载 Mybatis_PageHelper  版本随意,反正我用的5.0.0 m ...

  7. 算法工程师B

    美团点评2017校招笔试真题-算法工程师B   1.以下关于经典的k-means聚类的说法哪个是错误的? A:k-means聚类算法是全局收敛的 B:k-means的聚类结果和初始聚类中心点的选取有关 ...

  8. 2018.11.07 hdu1465不容易系列之一(二项式反演)

    传送门 其实标签只是搞笑的. 没那么难. 二项式反演只是杀鸡用牛刀而已. 这道题也只是让你n≤20n\le20n≤20的错排数而已. 还记得那个O(n)O(n)O(n)的递推式吗? 没错那个方法比我今 ...

  9. latex字体颜色

    具体的如下:\usepackage{color} 1. {\color{red} 文本} 2. \textcolor[rgb]{1,0,0}{文本}  颜色参数范围为[0,1]

  10. MFC 消息框

    窗口类能够使用messagebox int ret = MessageBox(_T("内容"), _T("标题"), MB_OKCANCLE|  //MB_OB ...