BZOJ NOIP提高组十连测第一场
今天的题目一共拿了$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提高组十连测第一场的更多相关文章
- 正睿 2018 提高组十连测 Day2 T2 B
题目链接 http://www.zhengruioi.com/contest/84/problem/318 题解写的比较清楚,直接扒过来了. B 算法 1 直接按题意枚举,动态规划或是记忆化搜索. 时 ...
- 正睿OI提高组十连测 day1 总结
可能是最简单的一场比赛了吧,结果却打得这么差... T1是个找规律题,结果一开始愚蠢地找错了规律,然后又对拍,到1h多一点才过掉 然后看t2和t3,以为t2是个水题,t3也只要处理一下就好了,先写t2 ...
- 正睿 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( ...
- 计蒜客 NOIP 提高组模拟竞赛第一试 补记
计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...
- NOIP提高组2004 合并果子题解
NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...
- 1043 方格取数 2000 noip 提高组
1043 方格取数 2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...
- [NOIP提高组2018]货币系统
[TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...
- NOIP提高组初赛难题总结
NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...
随机推荐
- windows中执行celery beat任务
由于最新的celery4.2不支持windows系统,因此按照网上的建议安装了3.1.25版.按照官网的说明使用 app.conf.beat_schedule = { 'add-every-30-se ...
- 【转】四、可空类型Nullable<T>到底是什么鬼
[转]四.可空类型Nullable<T>到底是什么鬼 值类型为什么不可以为空 首先我们都知道引用类型默认值都是null,而值类型的默认值都有非null. 为什么引用类型可以为空?因为引用类 ...
- Windows-universal-samples学习笔记系列三:Navigation
Navigation Back Button Master/detail Navigation menu (XAML) Pivot Projection XHR, handling navigatio ...
- 类似 QQ 音乐底部常驻播放栏(AVQueuePlayer)
一开始搞了个基类,但是这样所有类都要继承它才可以.后来考虑把他加到 window 上.但是在 appdelegate 中没有办法可以加到上面,最后在 keyWindow 的rootViewContro ...
- Linux常见目录使用区别
/bin 在有的Unix和Linux系统中是/usr/bin的链接,不过UBuntu系统是两个独立的目录./bin 存放系统管理员和普通用户都要使用的程序. /sbin 存放用于系统恢复,系统启动,系 ...
- JavaScript的进阶篇
一.Array对象.数组对象 1)创建数组对象 //Array 对象用于在单个的变量中存储多个值. //语法: //创建方式1: ,,]; //创建方式2: new Array(); // 创建数组时 ...
- kbmmw 与extjs 通过JSON Base64 显示图片
delphi 官网上开始也来越多的介绍delphi与extjs 结合的例子,今天我就把官方的例子翻版一下. 官方使用C++builder 和webbroker 实现. 我使用kbmmw 来实现一下. ...
- 2019.02.09 bzoj2440: [中山市选2011]完全平方数(二分答案+容斥原理)
传送门 题意简述:qqq次询问(q≤500)(q\le500)(q≤500),每次问第kkk个不被除111以外的完全平方数整除的数是多少(k≤1e9)(k\le1e9)(k≤1e9). 思路:考虑二分 ...
- Java设计模式——结构型模式
Java设计模式中共有7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,其关系如下面的图:1.适配器模式 适配器模式将某个类 ...
- s7-200 PID控位
只有加热模块,没有风扇,所以温度上冲达到5度左右 TITLE=程序注释 Network // 网络标题 // 初始化 LD SM0. LPS MOVW , VW500 MOVW , VW502 MOV ...