离线赛20171008总结

利用python-pandas和sklearn进行天池移动推荐离线赛的全过程 python,pandas,sklearn 阅读详情

考试时的状态

  这次考试总的来说考得很糟,前面三个小时基本都在梦游,不知道自己在该干什么。看了半天题目,连最基本的排序都没想起来,用计数算了半天,却被重复运算搞懵了,这些特殊情况都不该出现的。基本上分数都是最后半小时拿来的,自然也不会考得很高了。

题解

第一题:

  这道题关键考察的就是排列组合,这里有一个很重要的结论,那就是c[i][j]=c[i-1][j]+c[i-1][j-1]。这个结论的推导也是比较容易的,当产生一个新的元素x时,要么取用x,那么x接在任何组合中都可以,要么不取用x,那么就变成了在前i-1个元素中取用j个元素,这个递推公式非常重要,因为在算法的取模运算中,是不可以先模后除的,因此用加法递推,首先不会错,其次可以预处理,运算效率高。其实还有一种逆元方法。一个数x的逆元y的定义就是(x*y)%P=1。那么一个数除上x就等同于乘上y再取模,这个算法正确性也是显然的。那么y该怎么求呢?由费马小定理可知,如果P为质数,那么(x^(p-1))%P=1。所以y=x^(P-2)。而这个乘方计算,可以用快速幂来完成。因此接下来就可以把每一个阶乘都预处理出来,在计算c(m,n)=n!/(m!)(n-m)!时只要乘上逆元就可以了。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#define M 100086
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
const int P=1e9+7;
long long c[60][M];
int A[M];
long long ans=0;
int n,k;
int main(){
    cin>>n>>k;
    FOR(i,1,n)scanf("%d",&A[i]);
    sort(A+1,A+n+1);
    FOR(i,0,n)c[0][i]=1;//c[j][i]=c[j][i-1]+c[j-1][i-1];
    FOR(i,1,n)FOR(j,1,k)c[j][i]=(c[j][i-1]+c[j-1][i-1])%P;
    FOR(i,k,n)ans=(ans+1LL*c[k-1][i-1]*A[i])%P;
    cout<<ans<<endl;
    return 0;
}

第二题

  这道题玄学,考察的是一个状态压缩DP,每个数字的状态可以用一个二进制数来表示,0表示无数字,1表示有数字。由于每一个状态只与上一层有关系,因此就可以dp了,转移还是比较简单的,就是预处理麻烦了些。

70分代码:

#include<iostream>
#include<algorithm>
#define M 108
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
const int P=1e9+7;
long long dp[M][1<<13];
long long A[M];
long long ans=0;
int bin[M][15];
int top[M];
int n;
void create(){
    FOR(i,0,n){
        long long x=A[i];
        while(x){
            bin[i][top[i]++]=x%10;
            x/=10;
        }
    }
}
long long change(int i,int flag){
    long long res=0;
    DOR(j,top[i]-1,0){
        if(flag&(1<<j)){
            res=res*10+bin[i][j];
        }
    }
    return res;
}
int main(){
    cin>>A[0]>>n;
    FOR(i,1,n)A[i]=A[i-1]+1;
    create();
    FOR(j,1,(1<<top[1])-1)dp[0][j]=1;
    FOR(i,1,n){
        FOR(j,1,(1<<top[i])-1){
            long long x=change(i,j);
            FOR(k,1,(1<<top[i-1])-1){
                long long y=change(i-1,k);
                if(x>=y)dp[i][j]=(dp[i][j]+dp[i-1][k])%P;
            }
        }
    }
    FOR(j,1,(1<<top[n])-1)ans=(ans+dp[n][j])%P;
    cout<<ans<<endl;
    return 0;
}

第三题

  这道题,是一道图论题,由于数据比较小,弗洛伊德算法可以拿很多分,我一开始想到了枚举三维,剩下一维进行贪心,但这样的复杂度还是高了些,其实另外一条边也是可以贪心的,只要预处理出每个点作为起点的边权最大值与作为终点的边权最大值,然后就可以贪心了,其实只有中间两个点是有关系的,其他两个点都是相互独立的,因此就可以贪心了。
#include<iostream>
#include<queue>
#include<vector>
#define M 1050
#define FOR(i,a,b) for(register int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(register int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
const int INFINITY=1e9;
int d[M][M];
int n,m;
struct Node {
    int to,co;
};
vector<int>edge[M];
struct node {
    int to,co[2],fr;
    int cnt[2];
} Mx[M];
void bfs(int s) {
    d[s][s]=0;
    queue<Node>que;
    que.push((Node) {s,0});
    while(!que.empty()) {
        Node E=que.front();
        que.pop();
        FOR(i,0,edge[E.to].size()-1) {
            int y=edge[E.to][i];
            Node e= {y,E.co+1};
            if(e.co<d[s][y]) {
                d[s][y]=e.co;
                que.push(e);
            }
        }
    }
}
int main() {
    cin>>n>>m;
    FOR(i,1,m) {
        int a,b;
        scanf("%d%d",&a,&b);
        edge[a].push_back(b);
    }
    FOR(i,1,n)FOR(j,1,n)d[i][j]=INFINITY;
    FOR(i,1,n)bfs(i);
    FOR(i,1,n)FOR(j,1,n) {
        if(d[i][j]==INFINITY||i==j)continue;
        if(d[i][j]>Mx[i].co[0])
        Mx[i].co[0]=d[i][j],Mx[i].to=j,Mx[i].cnt[0]=1;
        else Mx[i].cnt[0]+=(d[i][j]==Mx[i].co[0]);
        if(d[i][j]>Mx[j].co[1])
        Mx[j].co[1]=d[i][j],Mx[j].fr=i,Mx[j].cnt[1]=1;
        else Mx[j].cnt[1]+=(d[i][j]==Mx[j].co[1]);
    }
    int ans=0;
    FOR(j,1,n)FOR(k,1,n) {
        if(d[j][k]==INFINITY||
        !Mx[j].cnt[1]||!Mx[k].cnt[0]||j==k)continue;
        if(Mx[j].to==Mx[k].fr&&Mx[j].cnt[0]==1&&Mx[k].cnt[1]==1)continue;
        if(Mx[j].co[1]+d[j][k]+Mx[k].co[0]>ans)
            ans=Mx[j].co[1]+d[j][k]+Mx[k].co[0];
    }
    cout<<ans<<endl;
    return 0;
}

小结

第一题:

  关键还是思路没找对,一开始一直在想怎么用计数优化,导致浪费了大量时间,接下来的阶乘展开也是浪费了较多时间,因为组合要调用的次数比较多,因此不应该用阶乘展开,而是应该用递推来写,阶乘展开适合用于写系数较大,调用较少的题目(比如双重回文数)。其次,这道题最基本的排序我想了好久都没有get到,其实这道题答案跟元素的位置一点关系也没有,考试的时候一定要考虑到这一点,否则会浪费许多时间。接下来的考试中一定要注意这些点,不能再犯了,特别是不能梦游。

第二题:

这道题关键是没有时间,其次,要是有时间的话,估计也不会那么轻易想到状压动归,对于一些特殊数字一定要敏感,比方说刻画状态时只有两种状态,取和不取,状态数据在10左右,很有可能就是状态压缩动态规划。上次的炮兵那道题也是这个思路。

第三题:

这道题我一上来就打了个弗洛伊德,水分达到了要多水就多水的境界,这样的话正确性就很高了,拿来对拍肯定不会出问题,正像小C说的,对拍的代码应该要多暴力就多暴力,要保证自己是对的,不过这次没来得及对拍,还是策略上出了问题啊,第一题花的时间太多了。

总结

这次考得很烂,有些问题要注意,策略上要注重,不过写来还是有收获的,这些经验都要总结了才有用。

written by ShimaKZ

天池离线赛 - 移动推荐算法(三):特征构建 本文讨论如何进行特征构建,为之后基于模型的方法提供有效的数据支持。 阅读详情

相关推荐

天池离线赛 - 移动推荐算法(一):题目与数据解析

移动推荐算法是阿里天池赛2015年赛题之一,题目以移动电商平台的真实用户-商品行为数据为基础来构建商品推荐模型。该题现已成为新人入门的经典演练对象,博主也希望基于该题场景,加深对机器学习相关知识的理解,积累实践经验。 题目回顾 关于题目和数据的介绍可访问天池官网中的:离线赛(移动推荐算法)-赛题与数据 业务场景 在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推...

Snoopy_Yuan技术部落格 1万+

天池新人实战赛之[离线赛]尝试(一)

题目(https://tianchi.aliyun.com/getStart)就不贴了。经过一些百度的资料,可以将这个问题简化为:某个U-I组合在观察日是否有购买行为?(二分类问题) 接下来分几个步骤来拆解整个过程: 一.简单分析 将两个数据表.tianchi_fresh_comp_train_item和tianchi_fresh_comp_train_user存入到数据库中, 对应表...

ronaldo-liu的博客 842

从零开始天池新人离线赛-数据预处理

作为一个数据挖掘和Python编程的双面小白,从零就真的是从一张白纸开始了。 今天,首先学习怎么将阿里给我们的CSV文件导入到Python中; import csv itemcsv = file('d:/test/item.csv','rb') r1 = csv.reader(itemcsv) 到这步为止,初步将该item.csv导入了Python中; 接下来,如果想要打印这些数据,

jackaroo_zyz的博客 3039

天池初体验——新人实战赛之[离线赛]

写在开头:本篇博文的适用对象为对天池比赛完全不知如何下手的小伙伴。本文将从头开始记录如何最简单地整理数据、提取特征,再建立模型或者使用人工规则进行预测,然后选出数据并提交,最后得到结果。所以,本文并不会更多得关注特征的选择提取以及模型该如何建立。最后,本人所使用的工具为Spark,非常地方便,它包含了spark-sql工具,数据库默认使用的是derby,同时,Spark含有mllib库,能非常方便

wy的点滴 1万+

天池离线赛 - 移动推荐算法(四):基于LR, RF, GBDT等模型的预测

本文讨论如何基于模型来进行预测,使用的模型包括逻辑回归(LR)、随机森林(RF)、梯度迭代提升树(GBDT)。.

Snoopy_Yuan技术部落格 2万+

天池新人实战赛——阿里移动推荐算法大赛(离线赛与平台赛)

竞赛题目 (离线赛与平台赛题目一样,只是数据量不一样,离线2000w+条数据,平台11亿+条数据) 在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。定义如下的符号: U——用户集合 I——商品全集 P——商品子集,P⊆I D——用户对商品全集的行为数据集合...

光于前裕于后的博客 1万+

缓存收录一: iOS离线缓存方案

现在许多主流的App都会做离线缓存功能,比如“今日头条”,“新浪微博”,每次启动项目或者刷新有网络时都是获取网络数据,网络出错时会展示缓存数据提高用户体验。 笔者就结合之前见过的、以及笔者自己做缓存的方式,谈一谈离线缓存的实现方案以及其中的优缺点。“今日头条”,“新浪微博”都是缓存了第一页的数据,笔者这里也是这样。 无demo不文章,笔者已将demo1 和demo2 写好,欢迎下载. 缓存

Lea__DongYang的博客 717

天池离线赛 - 移动推荐算法

因为思路已经总结的比较好了,所以,我就不多说了。拿过来作记录,供学习。 转载网址:https://blog.youkuaiyun.com/Snoopy_Yuan/article/details/72454636 天池离线赛 - 移动推荐算法(二) 天池离线赛 - 移动推荐算法(三) ...

永远飞翔的鸟 864

天池比赛

1.xgboost安装 http://blog.youkuaiyun.com/xizero00/article/details/73008330 2.在Anaconda中安装python包seaborn http://blog.youkuaiyun.com/robertchenguangzhi/article/details/49103421

hxshine的博客 1628

天池新人实战赛之[离线赛]-数据集

天池新人实战赛之[离线赛]-数据集

AI对嵌入式的冲击分三波,大多数人只看到了第一波

摘要:AI对嵌入式行业的冲击将分三波递进:第一波(已发生)是代码生成,AI能完成底层驱动配置;第二波(1-2年内)是架构设计,AI将参与系统方案制定;第三波(2-3年)是需求验证,AI能穷举测试用例但无法替代安全决策。每波冲击都将重新定义工程师的价值标准,经验型工程师若不能将隐性知识转化为显性规则将面临淘汰。作者指出,完全不用AI的人第一波就会被淘汰,而仅满足于第一波应用的人将在后续冲击中落后。

u010898524的博客 962

天池新人实战赛之[离线赛]题目与思路

1.1课题介绍 本课题以阿里巴巴移动电商平台的真实用户-商品行为数据为基础,同时提供移动时代特有的位置信息。您需要通过大数据和算法构建面向移动电子商务的商品推荐模型,挖掘数据背后丰富的内涵,为移动用户在合适的时间、合适的地点精准推荐合适的内容。 在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还...

weixin_30512043的博客 452

从OAuth到DID:Web4.0身份验证协议的技术演进图谱

在数字身份体系从Web2.0向Web4.0跨越的进程中,身份验证协议正经历着从中心化授权到自主主权的范式转移。本文通过对比OAuth 2.0、OpenID Connect等传统方案与W3C DID、ION等去中心化协议的技术架构,揭示身份验证技术在性能、安全、隐私三大维度的代际差异。基于对GitHub、欧盟数字身份钱包等典型系统的实测数据分析,量化评估中心化授权服务器的单点故障风险与DID链上验证的吞吐量瓶颈。结合零知识证明、分布式密钥管理等前沿技术,为开发者提供面向Web4.0的渐进式身份架构迁移策略。

水务人 835

阿里巴巴移动推荐算法离线赛(一)数据初步分析

阿里巴巴移动推荐算法离线赛(一)数据初步分析 详细的学习了该篇https://blog.youkuaiyun.com/Snoopy_Yuan/article/details/72454636,自己也分享一次 1 题目分析 移动推荐算法赛题如下: 根据阿里巴巴平台上20000名用户于2014.11.18—2014.12.18时间段的某一时刻(精确到小时)对商品总体的行为数据(有四种行为:点击、收藏、加购...

SIML 1128

地平线Matrix-Client实战:3分钟搞定摄像头调试与3D视图配置(附避坑指南)

本文详细介绍了地平线Matrix-Client在摄像头调试与3D视图配置中的实战技巧,包括环境准备、核心功能快速上手、高阶调试与性能优化等。通过3分钟快速配置指南和避坑建议,帮助开发者高效完成智能视觉系统开发,特别适用于自动驾驶和机器人视觉领域。

w7x8y9z的博客 268

实现单芯片2400bps 音频编解码方案

终于按照朋友的需求,帮他开发了一款单芯片集音频采集编码传送并接收解码播放功能的方案,交给快递公司邮寄给远在郑州的他.整个项目从开始定型到现在一个样机送出,整整花了1个月时间,感觉挺有成就感,挺有意思,工作是辛苦的,结果却是快乐的.现在将这中快乐的的心情与大家分享一下.    真个项目用一颗主控搞定,ARM9的,200KBytes 片内RAM,主频可以跑到300MHz,64pin LQFP封装

nyxsec的专栏 3684

天池新人实战赛之[离线赛]-初体验-Spark处理

写在前面 这种直接提交购物车的方式不涉及任何算法,后续我会逐渐学习引入机器学习的相关算法,从而更好的对结果进行预测。截止 2019-08-07排名77/11111 package src.main.scala.com.csylh.august.tianchi.dataclearer import org.apache.spark.sql.{SaveMode, SparkSession} /**...

留歌__36的博客 661

电子发票二维码背后的秘密:10分钟看懂校验码、加密字符含义与防伪设计

本文深入解析电子发票二维码的结构与防伪设计,揭示校验码和加密字符的生成原理及验证方法。通过实际案例和技术细节,帮助财务人员理解电子发票的安全机制,提升防伪识别能力,确保税务合规。

weixin_29248611的博客 532

天池新人实战赛之[离线赛]尝试(四)

之前的特征值有10几个,有点少了。增加特征值到

ronaldo-liu的博客 1296

L2-011 玩转二叉树

L2-011玩转二叉树(25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: ...

Beworth1207的博客 1735

【即插即用模块】注意力篇 | TIP 2024 | 注意力机制的有效改进!内容引导注意力块CGA,空间-通道-像素三个维度融合,实现涨点!

CGA(Content-Guided Attention)是一种融合多维度注意力的即插即用模块,通过并联空间和通道注意力并与像素注意力串联,实现从通道、空间到像素的三层级特征筛选。该模块采用层级递进设计,解决了传统单维度注意力的局限性,尤其适用于图像恢复等对特征精度要求高的任务。实验表明,CGA在去雾任务中能显著提升指标,但会略微增加参数量。模块代码支持灵活集成到各类视觉模型中,建议放置在网络靠前位置以充分释放后续层性能。其核心创新在于通过7×7大卷积捕捉长距离依赖,结合分组卷积实现像素级细粒度建模

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 229

初赛问题求解选集

zhowie大佬传送门YZK大佬传送门社会瑞姐传送门NOIP2005第一题答案:5。 解析:选择排序的原理。对于按顺序扫描的i,每次在i的后面选择一个最小的和i交换。 这5次分别交换( 32,25 ),( 74,28 ),( 43,53 ),( 58,47 ),( 47,86 )第二题答案:11011. 解析:当此时有x根火柴,当且仅当x%3==0时,x是必败的。 反之,如果x%3=a(

ShimaKZ的博客 1044

基于STFT和卷积神经网络的时序数据分类

我们提供了相应的代码和数据,读者可以直接运行并尝试在自己的数据集上进行分类实验。在本文中,我们将介绍一种基于短时傅里叶变换(STFT)和卷积神经网络(CNN)的时序数据分类方法。我们将提供可直接运行的代码和数据,以帮助读者理解和实现这一方法。STFT可以提取信号的频谱信息,有助于捕捉时序数据中的关键特征。在这个例子中,我们将使用一个简化的手势识别数据集作为示例。在这段代码中,我们使用Adam优化器和稀疏分类交叉熵损失函数进行模型的编译。然后,我们使用训练集进行模型的训练,同时使用测试集进行模型性能的验证。

CodeWOW的博客 694

NOIP2011提高组 DAY2 题解&总结

考试时的心态:   这次离线赛考的是NOIP2011,考得比较差,其实试卷比较水,水出新高度了。但是就考了160分,还是因为大意了,说实话,我一直在想第二题那个Sigma 是怎么计算的,很虚。虽然最后证明我的想法是正确的,但是由于这道题花的时间太少了,导致我WA了。就30分……   第三题玄学贪心水了30分,还是比较好的,就是第二题可惜了。题解:第一题:计算系数   这道题是道水题,纯属送分,

ShimaKZ的博客 989

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NOIP2007 初赛赛后总结

错误题号选择题:2,5,9,12,13,20第二题  这道题完全是道常识题。然而……我不知道……答案是E,二维表。第五题  这道题的关键是^的优先级高于|,因此先计算^。运算符优先级第九题  这道题是一道图论题,对于D有如下反例,这题我完全靠懵   第十二题  漏了一个选项,还是不够细心第十三题  算错了ORZ!!!都是不该失的分。第二十题  玄学常识题问题求解  全错……全错……全错……

ShimaKZ的博客 861

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 20171007离线赛总结
下一篇: NOIP初赛模拟赛总结
Shima_KaZe
博客等级 码龄9年 16粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值