[考试反思]0920csp-s模拟测试48:弱小


注:T1全场46个人里42个AC了。
%%%zkt也AK了呢越来越强啊
我是真的越来越弱了吗?
我到底在干什么。。。
在难度递增的题里分数递增。。。
考试过程大体还好,但是如此快速地WA掉T1也真是蠢得不行了。
T2没想到bitset,对1500这种数据范围还是不敏感。
T3想出来还是挺快的,注意观察数据范围就万事大吉。(二进制相关的题我的得分平时都不太低,是撞大运了?)
然后给T2和T3都上了个对拍,T3出锅了剩30分幸亏改过来了。
然而感觉T1实在太傻逼了暴力和正解是一个复杂度的就没打,手模几个样例就结束了。
题目的样例和手模的样例都在字串和子序列下答案相同。。。
但是这次不是看错题了,我也知道是子串,但是打到一半没过脑子就飘移到子序列上了。(因为原来做过一个那个题)
我,傻子,太弱了。
不要轻视最简单的题,你A不掉的!该打对拍还是要对拍。
bitset是出题人很喜欢的一个考点,1500的数据范围可能指向n3/32
T1:String Master
简单dp或硬匹配。
自行找不同?EXP++
#include<cstdio>
#include<iostream>
using namespace std;
char a[],b[];int n,k,dp[][][];
int main(){
scanf("%d%d%s%s",&n,&k,a+,b+);
for(int i=;i<=n;++i)for(int j=;j<=n;++j)for(int l=;l<=k;++l){
if(a[i]==b[j])dp[i][j][l]=max(dp[i][j][l],dp[i-][j-][l]+);
if(l)dp[i][j][l]=max(dp[i][j][l],dp[i-][j-][l-]+);
dp[i][j][l]=max(dp[i][j][l],max(dp[i-][j][l],dp[i][j-][l]));
}printf("%d\n",dp[n][n][k]);
}
10分的子序列版本
#include<cstdio>
#include<iostream>
using namespace std;
char a[],b[];int n,k,dp[][][],ans;
int main(){
scanf("%d%d%s%s",&n,&k,a+,b+);
for(int i=;i<=n;++i)for(int j=;j<=n;++j)for(int l=;l<=k;++l){
if(a[i]==b[j])dp[i][j][l]=max(dp[i][j][l],dp[i-][j-][l]+);
if(l)dp[i][j][l]=max(dp[i][j][l],dp[i-][j-][l-]+);
ans=max(dp[i][j][l],ans);
}printf("%d\n",ans);
}
100分的子串版本
思路积累:
- 细致。
T2:Tourist Attaction
容斥。所有路径-第1,3个点相同的路径-第2,4个点相同的路径+第13和24分别相同的路径-三元环数×6。
#include<cstdio>
int n,d[];long long dp[][],ans;char s[][];
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%s",s[i]+);
for(int i=;i<=n;++i)dp[][i]=;
for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')d[i]++;
for(int t=;t<=;++t)for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')dp[t][i]+=dp[t-][j];
for(int i=;i<=n;++i)ans+=dp[][i];
for(int i=;i<=n;++i)ans-=d[i]*d[i]*;
for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')ans++;
for(int i=;i<=n;++i)for(int j=i+;j<=n;++j)if(s[i][j]=='')
for(int k=j+;k<=n;++k)if(s[i][k]==''&&s[j][k]=='')ans-=;
printf("%lld\n",ans);
}
暴力
#include<cstdio>
#include<bitset>
using namespace std;
bitset<>b[];
int n,d[];long long dp[][],ans;char s[][];
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%s",s[i]+);
for(int i=;i<=n;++i)dp[][i]=;
for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')d[i]++;
for(int t=;t<=;++t)for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')dp[t][i]+=dp[t-][j];
for(int i=;i<=n;++i)ans+=dp[][i];
for(int i=;i<=n;++i)ans-=d[i]*d[i]*;
for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')ans++;
for(int i=;i<=n;++i)for(int j=;j<=n;++j)if(s[i][j]=='')b[i][j]=;
for(int i=;i<=n;++i)for(int j=i+;j<=n;++j)if(b[i][j])ans-=(b[i]&b[j]).count()*;
printf("%lld\n",ans);
}
bitset优化后就是正解
思路积累:
- STL bitset。32这个数字在复杂度里不可忽视!!
T3:Walk
观察数据范围,权值小于220,大约是1048576。既然没有出到230显然复杂度与之有关。
题目里有特殊性质,边权都是1,那么就是一个BFS而不是Dijkstra。(然而并没有卡Dijkstra的log复杂度)
那么每一个点只会被更新一次,那1048576也只会各被更新一次。
存进vector里面用dfs更新即可。
#include<cstdio>
#include<vector>
using namespace std;
vector<int>v[];
int n,val[],dt[],m,fir[],l[],to[],cnt,al[];
int q[],qt;
void link(int a,int b){l[++cnt]=fir[a];fir[a]=cnt;to[cnt]=b;}
inline void read(register int &p,register char ch=getchar()){p=;
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')p=(p<<)+(p<<)+ch-,ch=getchar();
}
void update(register const int num,register const int d){
al[num]=;
for(register int i=;i<v[num].size();++i)if(dt[v[num][i]]>d)dt[v[num][i]]=d,q[++qt]=v[num][i];
for(register int j=num;j;j-=j&-j)if(!al[num^(j&-j)])update(num^(j&-j),d);
}
int main(){//freopen("t3.in","r",stdin);freopen("t3.out","w",stdout);
read(n);read(m);
for(int i=;i<=n;++i)read(val[i]),v[val[i]].push_back(i);
for(int i=,x,y;i<=m;++i)read(x),read(y),link(x,y);
for(int i=;i<=n;++i)dt[i]=;
q[qt=]=;
for(int qh=;qh<=qt;++qh){
for(int i=fir[q[qh]];i;i=l[i])if(dt[to[i]]>dt[q[qh]]+)dt[to[i]]=dt[q[qh]]+,q[++qt]=to[i];
if(!al[val[q[qh]]])update(val[q[qh]],dt[q[qh]]+);
}
for(int i=;i<=n;++i)printf("%d\n",dt[i]==?-:dt[i]);
}
思路积累:
- 边权为1的图指向BFS。
- 二进制的子集枚举:去掉其中一位再迭代搜索(有重复,但是在每个点全场只需更新1次时复杂度是对的)
[考试反思]0920csp-s模拟测试48:弱小的更多相关文章
- [考试反思]0718 NOIP模拟测试5
最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...
- [CSP-S模拟测试48]反思+题解
状态很垃圾的一场考试.感觉“这么多分就够了”的心态很是在给自己拖后腿. 打开题面,第一页赫然写着:$Claris' Contest$. 吓得我差点手一抖关掉.不过后来想想似乎强到变态的人出的题都不是很 ...
- 2019.9.20 csp-s模拟测试48 反思总结
头疼,不说废话了,祝大家rp++. T1: 暴力枚举,n3. 枚举两个串开始匹配的位置,每一次尽量修改. #include<iostream> #include<cstdio> ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]0909csp-s模拟测试41:反典
说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- [考试反思]0714/0716,NOIP模拟测试3/4
这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...
- [考试反思]1003csp-s模拟测试58:沉淀
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...
随机推荐
- 在 Cocos Creator 中使用 Protobufjs(一)
一. 环境准备 我一直在探索Cocos H5正确的开发姿势,目前做javascript项目已经离不开 nodejs.npm或grunt等脚手架工具了. 1.初始化package.json文件 npm ...
- WebSocket协议与抓包
WebSocket协议 WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器 ...
- 02-18 scikit-learn库之k近邻算法
目录 scikit-learn库之k近邻算法 一.KNeighborsClassifier 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 方法 1.4.1 kneighbors([X, n ...
- 04-04 AdaBoost算法代码(鸢尾花分类)
目录 AdaBoost算法代码(鸢尾花分类) 一.导入模块 二.导入数据 三.构造决策边界 四.训练模型 4.1 训练模型(n_e=10, l_r=0.8) 4.2 可视化 4.3 训练模型(n_es ...
- Java并发编程总结(一)Syncronized解析
Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...
- SSH通道来访问MySQL
许多时候当要使用Mysql时,会遇到如下情况: 1. 信息比较重要,希望通信被加密.2. 一些端口,比如3306端口,被路由器禁用. 对第一个问题的一个比较直接的解决办法就是更改mysql的代码,或 ...
- ride.py 启动报错
报错问题: C:\Users\iphauser>ride.py Traceback (most recent call last): File , in OnInit self._plugin_ ...
- 6. SSH远程管理服务实战
1. SSH基本概念? ssh是一个应用层安全协议 2.SSH主要的功能是? 实现远程登录, 数据传输过程中进行加密. 钉钉(澡堂模式) 远程登录: ssh telnet 3.SSH与Telnet之间 ...
- sql查询入门
SQL语言是一门相对来说简单易学却又功能强大的语言,它能让你快速上手并很快就能写出比较复杂的查询语句.但是对于大多数开发者来说,使用SQL语句查询数据库的时候,如果没有一个抽象的过程和一个合理的步骤, ...
- [NOIP2013提高组]华容道
这道题第一眼看是暴力,然后发现直接暴力会TLE. 把问题转换一下:移动空格到处跑,如果空格跑到指定位置的棋子,交换位置. 这个可以设计一个状态:$[x1][y1][x2][y2]$,表示空格在$(x1 ...