今天的题目一共拿了$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缓存(一,二级别)

    数据查找过程: 二级缓存(默认关闭) -> 一级缓存(默认开启) -> 数据库 一级缓存: 一级缓存是SqlSession自带的.SqlSession对象被创建,一级缓存就存在了.//是针 ...

  2. springMVC学习三 注解开发环境搭建

    第一步:导入jar包 第二步:配置DispatcherServlet  前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...

  3. 棋盘问题(NOIP1997)

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

  4. 2017多校1 hdu-Balala Power!

    其实这道题的思路挺简单的,就是找在第一位置没有出现过并且权值小的那个字母为0. 把a~z按照权值排序,其实难就难在这里,权值很大我们怎么给他排序. 其实可以开个数组来存他们每位数是多少,然后给他们比个 ...

  5. windows下Oracle数据库完全删除

    1.1   停止所有oracle的服务 1.2   删除安装路径 app及其下所有文件 1.3   删除注册表 regedit 进入 在下列列表中找到与oracle相关的注册表项删除 1.HKEY_L ...

  6. python3.4连接mysql5.7数据库增删改查

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  7. tokudb_tmp_dir导致的tokudb加载失败

    安装TOKUDB数据库,安装完成后为了使配置生效,重启完数据库后,发现: mysql> show engines; +--------------------+---------+ | Engi ...

  8. js动态删除某一行,内容超出单元格后超出的部分用省略号代替

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <s ...

  9. 20155205 2016-2017-2 《Java程序设计》第1周学习总结

    20155205 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 下载了娄老师推介的xmind,试着自己总结了一下. 为了要运行Java程序,必须安装 ...

  10. ckeditor粘帖上传图片控件-更新-2.0.15版本

    泽优Word图片上传产品测试 泽优Word图片上传控件WordPaster2,基于php开发环境测试. 泽优软件官网Word图片上传产品介绍页面: http://www.ncmem.com/webap ...