今天的题目一共拿了$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. Tgrocery学习及使用

    能够学习到短文本分类模型——Tgrocery,十分感谢@GavinBuildSomething把源码及测试数据分享,在此我也作为一名学习者将自己的学习过程记录下来,希望对其他人有所帮助.   1.学习 ...

  2. 【搜索】Shuffle'm Up

    运用第i个s12和第i+1个s12中,每个位置具有的确定的映射关系: pos = pos * 2 + 1 (pos < c) pos = pos * 2 - c * 2 (pos >= c ...

  3. python之Flask框架

    一.简单的Flask框架 1)flask简介 Flask 是一个 web 框架.也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序. 这个 wdb 应用程序可以使一些 we ...

  4. mysql安装后初始密码

    在安装过程中没有任何提示,安装完之后无法登陆 后经查询发现,可以暂时以 mysql -u root -p登陆 此账户没有密码直接enter即可. update user set Password=PA ...

  5. myeclipse部署项目的时候报No projects are available for deployment to this server但是项目明明存在

    如题,今天在尝试部署从SVN上down下来的项目时,发现不能被tomcat识别成web项目!原因是SVN上down下来的项目的结构并非典型的web项目.  解决办法,右键项目->properti ...

  6. 2018.10.26 NOIP模拟 瓶子 (dp/贪心)

    传送门 正解是dp并不想去想了. 自己yy了一个贪心拿了95pts95pts95pts,唯一没过的点还只有一个地方错了,面向数据变成之后过啦! 所以我讲讲如何贪心. 考虑到最后都只会合并成一种颜色,所 ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 B BE, GE or NE(博弈,记忆化搜索)

    链接https://nanti.jisuanke.com/t/31454 思路 开始没读懂题,也没注意看数据范围(1000*200的状态,记忆化搜索随便搞) 用记忆化搜索处理出来每个状态的胜负情况 因 ...

  8. excel2007vba绘图1

    参考:http://club.excelhome.net/thread-480025-1-1.html '----------------------------------------------- ...

  9. UVa 10294 Arif in Dhaka (First Love Part 2) (Polya定理)

    题意:给定 n 和 m 表示要制作一个项链和手镯,项链和手镯的区别就是手镯旋转和翻转都是相同的,而项链旋转都是相同的,而翻转是不同的,问你使用 n 个珠子和 m 种颜色可以制作多少种项链和手镯. 析: ...

  10. IT桔子-抓取数据