今天的题目一共拿了$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. 爬虫之mongodb数据库

    一 mongodb的介绍 1.易用性:mongodb是一款强大.灵活并且易扩展的数据库.他面向于文档的数据库,而不是关系性数据库.不采用关系型主要是为了获得更好的扩展性.还有一个好处就是面向文档的数据 ...

  2. 746. Min Cost Climbing Stairs

    两种方法,核心思想都一样,求出走到每一步上的最小开销,直到最后一步和倒数第二步,比较其最小值返回即可. 方法一,用一个辅助的容器 class Solution { public: int minCos ...

  3. 2019.01.23 hdu1964 Pipes(轮廓线dp)

    传送门 题意简述:给一个没有障碍的网格图,任意两个格子连通需要花费一定代价,现在求一条覆盖所有格子的哈密顿回路的总权值的最小值. 思路: 跟这道题一毛一样,除了把求和变成求最小值以外. 代码: #in ...

  4. 2018.12.31 NOIP训练 偶数个5(简单数论)

    传送门 对于出题人zxyoizxyoizxyoi先%\%%为敬题目需要龟速乘差评. 题意简述:5e55e55e5组数据,给出n,请你求出所有n位数中有偶数个5的有多少,n≤1e18n\le1e18n≤ ...

  5. SELECT INTO创建临时表

    SELECT INTO创建临时表 SQL Server临时表有两种类型:本地和全局.它们在名称.可见性以及可用性上有区别.本地临时表的名称以单个数字符号 (#) 打头:它们仅对当前的用户连接是可见的: ...

  6. boost-智能指针

    使用boost的智能指针需要包含头文件"boost/smart_ptr.hpp",c++11中需要包含头文件<memory> 1.auto_ptr.scoped_ptr ...

  7. Host is not allowed to connect to this MySQL server---------------->windows10

    错误,数据库无法远程连接. 第一步,关闭本地防火墙 注意: 两台连接的机器都需要关闭 第二步,两台机器互相ping,看是否可以互相访问 丢失为零,意为可以连接. 第三步登录数据库 第四步,切换,数据库 ...

  8. 第13章:MongoDB-聚合操作--初体验

    ①MongoDB 的聚合功能 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作. 聚合操作还能够 ...

  9. WordPaster-CuteEditor6.7整合教程

    CuteEditor6.7下载地址:http://yunpan.cn/QzvjC5iaH5HJm 1.添加CuteEditor.dll的引用 2.在编辑器页面,为编辑器工具栏增加控件按钮 3.在前台增 ...

  10. day26(分页查询)

    分页查询思路 问题: 服务器向浏览器想用数据很多的时候可以对数据进行封装. domain层  封装数据 package com.baidu.domain; import java.util.List; ...