cqround1

1.这次比赛160分

(1)反质数:60

(2)二分答案+2sat:验证:  0分

(3)树上LCA+推公式: 100分

2.总结:这次比赛第三题做起来非常顺,做过类似的题:奶牛大集会nkoj3689,树上的lca加乱搞基本上就是这样,注意画一些复杂的图(儿子祖先画全)不要凭空想,因为这种式子很容易推错,这里差一点那里差一点就爆0了。第一题,虽然反质数并没有学过,但是其实仔细想一想是推得出来的,关于反质数,可以看这篇解题报告点击打开链接。第二题超纲,但是看懂了还是感觉很厉害,那么通常什么情况可以使用2sat?对于每一个东西,有两种情况并且必须二选一!

cqround2

1.这次比赛300分

(1)乱搞模拟:100

(2)打铁:100

(3)倒序+并查集:100

2.总结:这次虽说ak了,可以说是运气好吧。当然也是一中的题确实水分比较重,感觉到处找了几道题,有先天优势,第二题做过两次的原题,当年也是自己推出来的。第一题难点在于读题难!这个题也可以提示关于输入:example:255.255.255.247   。怎么读这四个数呢?(1).输入优化直接无视'.'(2)scanf("%d.%d.%d.%d",...)。第三题有人剧透了是并查集,那就是并查集撒。这个题,注意到并查集仅支持合并操作,但此题题意的意思是要断开,正起断开,那么就倒起来合并!这种思想的题是做过的:假期关楼。先把他不断的边连接的节点用并查集合并,与1联通的节点就是掉不下去的。倒序讨论断开的边,合并,在什么时候与1联通,这一块所含节点的ans就是段边的时间。加油!!!


cqround3

1.这次比赛145分!亏的一匹

(1)找规律+组合数取模:25

(2)trie+dp:100

(3)构造序列:20

2.总结:惨!第一题死因:1e9+7打成了1000000009!!!第二题比较好想的dp,对于每一个位置,很显然要找出为当前1--i这个字符串后缀的单词,字典树!第三题确实厉害,难想,看懂了觉得神题一道。


cqround4

1.这次比赛200分

(1)暴力打出来找规律!

(2)观察代码,很简单的gcd

(3)堆+贪心

2.总结:仔细审题!!!第一题最开始没看到(n-1)是(m-1)的倍数,打表找不出规律。第三题确实比较厉害,但是有一个经典的贪心原则,详情见nkoj3827


西南联训6

1.这次比赛200分

(1)dfs,类似重庆排位赛1反质数!

(2)区间dp

(3)图论

2.总结:仔细审题!!!第一题最开始没看到(n-1)是(m-1)的倍数,打表找不出规律。第三题确实比较厉害,但是有一个经典的贪心原则,详情见nkoj3827

cqround5

1.这次比赛190分

(1)分析找通式

(2)树形dp(打铁)

(3)国家队训练题,90分算法(暴力spfa10分+树上lca30分+mst树上lca多一条边单独算50分)

2.总结:第一题不说了,仔细分析还是比较容易,但是尽量少用点时间,这几场第一题都用了一个小时多一点。第二题一道树形dp(打铁),当时确实没做出来,状态定的不对,树形dp要复习一下!第三题能拿到得分都拿到了,拿到题先看看数据范围,10分暴力送分,30分lca(m==n-1),50分mst+lca+单独一条边单独算。正解思路大概懂了,但是目前还是写不出代码。。。


cqround6

1.这次比赛190(200)分(一中第二题数据有一组不合法)

(1)分析找规律

(2)图论dijkstra+top打铁

(3)dfs

2.总结:第一题还是比较容易,对于当前选了一些硬币的和为sum,那么下一枚硬币的面值p必须在1---sum+1之间,这样才能满足选了这枚硬币后,1----sum+p之间的值全部能凑出来,这个是在草稿本上用了10分钟推出来的。那么怎么保证所选硬币个数最少呢?因为p必须在1---sum+1之间,当然取区间中面值最大的,一定是最优的。其实仅仅就是这样很容易卡,比如1e9 2 1 2这样的数据不管是循环还是递归都会死掉,后面又想出来了这个东西。当sum>=p[n]即和不小于最大面值的硬币的时候,根据前面提到的原则肯定就选p[n]!这个时候就不需要再去模拟了,直接除就行了,这个是肯定卡不掉的。一中数据太辣鸡,导致写暴力的人都a了。第二题大水题,反向最短路+top打铁。第三题dfs,dfs再一次的死了,搜索能力还需加强!关于这个题,最开始是写的搜完了再check,但是发现边搜边check效率高到爆炸,详情参见nkoj3849游戏!


10.31的一个智障错!

新oj真的良心,爆0的代码拿了95分。三分法的下界没赋初值!能拿多少分全凭运气!记住非全局变量记得赋初值

11.3模拟赛

1.这次比赛170分

(1)暴力送分题100

(2)正解:双hash,送的50分拿好。

(3)正解dp,dfs30分剪枝剪成了20分

2.总结:先说第二题,本来考试的时候想到了hash,并且在考虑一个子串---->下一个子串时,如何在O(1)的复杂度内处理出下一个子串的hash。但是,hash学的撇!不知道hash可以直接这么搞!

以今天第二题为例:好文章

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
#define ull unsigned long long
#define puu pair<ull,ull>
#define mp make_pair
using namespace std;
const ull seed1=31;
const ull seed2=131;
const ull mod1=1875647;
const ull mod2=3838437;
inline void _read(int &x){char t=getchar();bool sign=true;while(t<'0'||t>'9'){if(t=='-')sign=false;t=getchar();}for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';if(!sign)x=-x;
}
ull temp1=1,temp2=1;
ull hash1,hash2;
int n,m;
char s[200005];
puu ans[200005];
ull tot=0;
int main(){int i,j,k;cin>>n>>m;scanf("%s",s+1);for(i=1;i<=m;i++){hash1=(hash1*seed1+s[i])%mod1;hash2=(hash2*seed2+s[i])%mod2;temp1=temp1*seed1%mod1;temp2=temp2*seed2%mod2;}ans[++tot]=mp(hash1,hash2);for(i=m+1;i<=n;i++){hash1=(hash1*seed1%mod1+s[i]+mod1-temp1*s[i-m]%mod1)%mod1;hash2=(hash2*seed2%mod2+s[i]+mod2-temp2*s[i-m]%mod2)%mod2;ans[++tot]=mp(hash1,hash2);}sort(ans+1,ans+1+tot);tot=unique(ans+1,ans+1+tot)-ans-1;cout<<tot;
}

原型BKDRhash。O(1)转移出下一个长度为m的子串的hash,hash每处理一个新的元素乘一次seed,因为子串长度为m,一个元素从进入这个hash到离开,乘了m次seed,减去即可!注意不要乱取模,hash是一门玄学,可以记住这个写法!

下面说说第三题:好线路

考试的时候推出了这一个很关键的式子:要求的:方差*(n+m-1)^2,令n-m+1=k,可化简为:k*(x1^2+x2^2+..+xk^2)-(x1+x2+..xk)^2。然而想出了这个式子却还是想着dfs!!!想dp的时候却想的是方差的定义式,有后效性。dp该从我推出的这个式子入手!想一想把xk这个项分离出来跟前面的x1....xk-1产生关系。于是得到:k*(x1^2+x2^2+...xt^2)-(x1+x2+...xt)^2 = k*(x1^2+x2^2+...+xt-1^2)-(x1+x2+...+xt-1)^2+k*xt^2  -xt^2 - 2*(x1+x2+...+xt-1)*xt =  k*(x1^2+x2^2+...+xt-1^2)-(x1+x2+...+xt-1)^2 +(k-1)*xt^2 -2*(x1+x2+...+xt-1)*xt

递推关系出来了,dp!

f[i][j][s]:当前的到第i行第j列,并且当前路径上的权值和为s,这个式子k*(x1^2+x2^2+...xt^2)-(x1+x2+...xt)^2的最小值。

由之前推出的式子:

f[i][j][s]=min ( f[i][j-1][s-map[i][j]] , f[i-1][j][s-map[i][j]] ) + (k-1) * ( map[i][j] ) ^ 2  -  2 * ( s - map[i][j] ) * map[i][j]

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
const int inf=0x3f3f3f3f;
inline void _read(int &x){char t=getchar();bool sign=true;while(t<'0'||t>'9'){if(t=='-')sign=false;t=getchar();}for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0';if(!sign)x=-x;
}
int n,m,k;
int ans=inf;
int map[55][55];
int f[55][55][5000];
int minn[55][55];
int maxn[55][55];
int lim;
int main(){int i,j,h,s;cin>>n>>m;for(i=1;i<=n;i++){for(j=1;j<=m;j++){cin>>map[i][j];}}k=n+m-1;for(i=1;i<=n;i++){for(j=1;j<=m;j++){minn[i][j]=min(minn[i-1][j],minn[i][j-1])+map[i][j];maxn[i][j]=max(maxn[i-1][j],maxn[i][j-1])+map[i][j];}}lim=maxn[n][m];//f[1][1][map[1][1]]=(k-1)*map[1][1]*map[1][1];for(i=0;i<=n;i++){for(j=0;j<=m;j++){for(s=0;s<=lim;s++){f[i][j][s]=inf;}}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(i==1&&j==1){f[i][j][map[1][1]]=(k-1)*map[1][1]*map[1][1];continue;}for(s=minn[i][j];s<=maxn[i][j];s++){f[i][j][s]=min(f[i-1][j][s-map[i][j]],f[i][j-1][s-map[i][j]])+(k-1)*map[i][j]*map[i][j]-2*(s-map[i][j])*map[i][j];}}}for(i=minn[n][m];i<=maxn[n][m];i++){ans=min(ans,f[n][m][i]);}cout<<ans;
}

cqround8

1.这次比赛170,最垃圾的一次

(1)dp100分

(2)单调队列(栈),类似于广告牌模型

(3)类似gcd递归解决

2.总结:这次比赛值得好还反省!有史以来最丑的一次!第一题稍微提一下,注意到贪心是有问题的!第二题,思维方向有问题,我想的是先枚举点,再看包含这个点的子矩阵。而实际上对于这种题,应该先枚举矩阵,再来看其中的最小值是什么!比如今天这个题,应该枚举第i排到第j排再看区间中的最小值,min[k]表示第k列中,第i排到第j排的最小值,对于第i排到第j排之间,要让min[k]是子矩阵中的最小值,考虑k往两边延展,例如往左找到第一个小于min[k]的min[h],那么记left[k]=h+1,即k往左最多可以延展到h,往右同理,记right[k],那么right,left怎么处理,往左第一个比自己小的:单调队列!那么对于第i排到第j排中,以min[k]为最小值的子矩阵个数很显然就是(right[k]-k+1)*(k-left[k]+1)说说第三题,正难则反!倒过来思考,状态(a,b)令(a>=b)可以转移至(a+k*b,b),那么倒过来也就很简单了,用类似于gcd的方式倒过来计算,work(x,y)表示到状态(x,y)所需的步数(令x>=y)。而题目要求至少一个为n,那么就取work(n,i)的最小值即可。


对拍模板

@echo off
:loop
makedata.exe
baoli.exe
zhengjie.exe
fc baoli.out ans.out
if not errorlevel 1 goto loop
pause
:end

比赛经验总结--187相关推荐

  1. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  2. Kaggle 数据挖掘比赛经验分享 (转载)

     [干货]Kaggle 数据挖掘比赛经验分享 (转载) 标签: 数据挖掘数据科学家机器学习kaggle 2017-05-21 19:25 99人阅读 评论(0) 收藏 举报 本文章已收录于: 分类 ...

  3. kaggle账号_Kaggle 数据挖掘比赛经验分享

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 腾讯广告算法大赛 作者 | 陈成龙 Kaggle 于 2010 年创立,专注数据科学,机器学 ...

  4. Kaggle 数据挖掘比赛经验分享(转)

    原作者:陈成龙 简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛 ...

  5. 【比赛经验】陈成龙博士Kaggle计算机编程竞赛数据挖掘经验分享

    来源:腾讯广告算法大赛(ID:TSA-Contest) 作者简介 陈成龙, 2015 年博士毕业于中山大学,研究图像篡改检测,在图像领域顶级期刊IEEE TIP上发表论文2篇,Kaggle Crowd ...

  6. 【采访】腾讯社交广告高校算法大赛决赛第二周周冠军——nju_newbiew比赛经验及心得分享

    腾讯社交广告高校算法大赛决赛 第二周周冠军 他们的名字叫nju_newbiew 进入决赛之后他们的成绩是火速提升 直到稳定在第一名 这又是一支谜一般的队伍 今天小编就来给大家揭开神秘大佬的面纱 三个偶 ...

  7. 【采访】腾讯社交广告高校算法大赛第二周周冠军——Groot 比赛经验及心得分享

    [采访]腾讯社交广告高校算法大赛第二周周冠军--Groot 比赛经验及心得分享 经过又一周紧张又激烈的角逐 腾讯社交广告高校算法大赛产生了第二周周冠军 他们的名字叫Groot 三个冷静沉着的大男孩 低 ...

  8. 【采访】腾讯社交广告高校算法大赛第三周周冠军——到底对不队比赛经验及心得分享

    [采访]腾讯社交广告高校算法大赛第三周周冠军--到底对不队比赛经验及心得分享 经过又一周紧张又激烈的角逐 腾讯社交广告高校算法大赛产生了第三周周冠军 他们的名字叫"到底对不队" 这 ...

  9. 【采访】腾讯社交广告高校算法大赛第一周周冠军——郭达雅 比赛经验及心得分享

    [采访]腾讯社交广告高校算法大赛第一周周冠军--郭达雅 比赛经验及心得分享 经过一周紧张又激烈的角逐 腾讯社交广告高校算法大赛产生了第一位周冠军 他的名字叫郭达雅 一个腼腆沉静的小男孩 低调的实力派, ...

最新文章

  1. Java OOP(Object Oriented Programming)个人理解及总结
  2. 做软件开发10年了,我准备转行了,做自媒体
  3. Google colab: 修改系统时间 change system time
  4. 伯克利论断:Serverless 才是云时代的主宰
  5. 第九章 神经网络学习-机器学习老师板书-斯坦福吴恩达教授
  6. 美媒:小米新浪达成合作 采取行动对抗腾讯
  7. python 删除特定行数据_怎么用 Python 做数据分析实例
  8. ios category类别的使用
  9. 学python lesson4
  10. 摘自网络上总结出的一些开源的技术
  11. Educational Codeforces Round 12 F. Four Divisors 求小于x的素数个数(待解决)
  12. C#与.NET程序员面试宝典 1.2.4 简历中的闪光点----突出可转移技能(可能是你忽略的优势)...
  13. 基于PHP MYSQL的高校社团管理系统_高校社团管理系统
  14. 微电子 半导体 网址 一览表
  15. 2021年全国大学生电子设计竞赛官方通知正式发布
  16. win7系统中安装破解版Charles教程 基本使用方法汇总
  17. AI 研究助力体育分析
  18. 3.1 数据报表之Excel操作模块 XlsxWriter
  19. Excel按倍率一键调整当前表格的行高
  20. 打印html所有标签,js 打印标签里的所有内容(带分页)

热门文章

  1. 【思维导图】零基础如何把握Python学习方向
  2. 利用大数据挖掘和知识发现技术辅助智慧城市发展
  3. NSWOJ-zlh找男朋友(水题)
  4. 求答案 ? 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还差1个。 6个6个拿,还剩3个。 7个7个拿,还剩4个。 8个8个
  5. Gradle子模块之间的依赖
  6. 处理机调度——看这一篇就够了
  7. 最易出现的几种心理状态,让人崩溃!
  8. JDBC:PreparedStatement 插入BLOB类型的数据,PreparedStatement 批量处理,Connection 事务处理
  9. 作业盒子生端AndrOid,作业盒子小学学生端
  10. 百度/谷歌/微软/Facebook 人工智能发展方向