20171006离线赛总结

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

考试时的思维

cstdio 文件名 输出调试 内存
第一题
递推 拿完80分就跑
这里写图片描述
第二题
先按背包打 拿完60分就跑
看一看能不能排序贪心
每一次选择性价比最高的,然后当v==m-1并且花费为2时特殊判,有两种方案,要么从后面选一个花费
为1的,要么弹出一个花费为1的,把当前的插入进去,答案就在这两者中,正确性显然。
第三题
三十分还是比较好拿的,爆搜
其次,可以枚举起点直接遍历,然后判断是否可行,如果不可行,这分跟白送的一样。之后二进制枚举,
判断最小值,如果运气好的话60分到手,少说也有40分

题解

第一题:构造序列

  这道题用DP写有80分,还是比较高的,然后我就没去管它,结果这次大家的分数普遍在200分以上,特别是zhowie大佬强的不行,直接280。这就很尴尬了,220中等水平吧,但这怎么够呢?
  这道题的关键在于条件A<=B or A%B!=0 这个条件很难处理,但是如果把这个条件去反,就变成了A>B and A%B==0 这就变成了A是B的倍数,因此只要把所有情况加起来,再减去A是B的倍数的情况就可以了。用前缀和优化,每一次只要把倍数减去就可以了,正确性显然。

//written by ShimaKZ
#include<cstdio>
#include<iostream>
#define Init() if(n==n)
#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;
int n,k;
long long dp[15][M];//dp[i][j]表示第i个点取j的方案数。
struct water {
    void solve() {
        FOR(i,1,k)dp[1][i]=1;
        FOR(i,2,n)FOR(l,1,k)FOR(j,1,k)if(j<=l||j%l!=0) {
            dp[i][l]+=dp[i-1][j];
            dp[i][l]%=P;
        }
        long long ans=0;
        FOR(i,1,k) {
            ans+=dp[n][i];
            ans%=P;
        }
        cout<<ans<<endl;
    }
} p80;
struct perfect {
    void solve() {
        FOR(i,1,k)dp[1][i]=1;
        Init();
        FOR(i,2,n) {
            long long tmp=0;
            FOR(j,1,k) {
                tmp+=dp[i-1][j];
                tmp%=P;
            }
            FOR(j,1,k){
                dp[i][j]=tmp;
                for(int l=j+j;l<=k;l+=j){
                    dp[i][j]-=dp[i-1][l];
                    dp[i][j]+=P;
                    dp[i][j]%=P;
                }
            }
        }
        int ans=0;
        FOR(i,1,k)ans+=dp[n][i],ans%=P;
        cout<<ans<<endl;
        return;
        return;
        return;
    }
} p100;
int main() {
    cin>>n>>k;
    p100.solve();
    return 0;
}

第二题:1/2背包

  这道题其实挺水的,由于只有1和2两种选择,因此先按照性价比排序,然后把性价比高的塞到背包里,当达到v-1并且下一个体积是2时特殊判断一下,要么前面弹出一个体积为1的背包,把这个背包塞进去,要么从后面找一个体积为1的背包塞进去。正确性显然。
  

//written by ShimaKZ
#include<cstdio>
#include<iostream>
#include<algorithm>
#define M 200050
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int n,m;
struct node {
    int value,size;
    int balance;
} A[M];
bool cmp(node a,node b) {
    if(a.balance!=b.balance)return a.balance>b.balance;
    return a.size<b.size;
}
struct perfect {
    void solve() {
        FOR(i,1,n)A[i].balance=A[i].value*2/A[i].size;
        sort(A+1,A+n+1,cmp);
        int v=0;
        long long ans=0;
        FOR(i,1,n) {
            if(v+A[i].size<m) {
                ans+=A[i].value;
                v+=A[i].size;
            } else if(v+A[i].size==m) {
                ans+=A[i].value;
                v+=A[i].size;
                break;
            } else if(v==m-1) {
                int res1=ans,res2=ans;
                DOR(j,i-1,1) {
                    if(A[j].size==1) {
                        res1-=A[j].value;
                        res1+=A[i].value;
                        break;
                    }
                }
                FOR(j,i+1,n)if(A[j].size==1) {
                    res2+=A[j].value;
                    break;
                }
                ans=max(res1,res2);
                break;
            }
        }
        cout<<ans<<endl;
    }
} p100;
int main() {
    cin>>n>>m;
    FOR(i,1,n)scanf("%d%d",&A[i].size,&A[i].value);
    p100.solve();
    return 0;
}

  这道题还可以进行终态枚举,只要知道取了多少个体积为1的背包,体积为2的背包就可以了。
优化代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#define M 200050
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int A1[M],A2[M];
long long sum[3][M];
int t1,t2;
int n,m;
bool cmp(int a,int b) {
    return a>b;
}
int main() {
    cin>>n>>m;
    int a,b;
    FOR(i,1,n) {
        scanf("%d%d",&a,&b);
        if(a==1)A1[++t1]=b;
        else A2[++t2]=b;
    }
    memset(sum,0,sizeof(sum));
    sort(A1+1,A1+1+t1,cmp);
    sort(A2+1,A2+1+t2,cmp);
    FOR(i,1,m)sum[1][i]=sum[1][i-1]+A1[i];
    FOR(i,1,m)sum[2][i]=sum[2][i-1]+A2[i];
    long long ans=0;
    FOR(i,0,t2) {
        int d=(m-i*2);
        if(d<0)break;
        long long tmp=sum[1][d]+sum[2][i];
        if(tmp>ans)ans=tmp;
    }
    cout<<ans<<endl;
    return 0;
}

第三题:引水入城(NOIP2010真题)

  这道题首先送了30分白拿的一样,然后我们可以观察到,每一个点对应的区间是分开来的,只要在DFS的同时,把每一个点对应的L,R处理出来,然后再进行计算。当然,我没想出来。
  这里有YZK大佬的证明
  证明:若一个供水点不能覆盖一个区间,则这个点至少覆盖了两个不相邻的点(不然就视为连续的区间),供水点到两个点的路径会构成一个闭区间,而若有路径到里面的点,则必会经过这些路径上的某个点,这与之前的条件相矛盾
  这里写图片描述

/*
    Name:Flow
    Author:ShimaKZ
    Date: 06/10/17 15:43
    Description: ORZ
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define M 666
#define FOR(i,a,b) for(int i=(a),i##_end_=(b);i<=i##_end_;++i)
#define DOR(i,a,b) for(int i=(a),i##_end_=(b);i>=i##_end_;--i)
using namespace std;
int n,m;
int H[M][M];
struct node {
    int L,R,h;
} A[M][M];
bool mark[M][M];
int ans;
int drx[]= {1,0,-1,0},dry[]= {0,-1,0,1};
void Depth_First_Search(int x,int y) {
    if(mark[x][y])return;
    mark[x][y]=true;
    if(x==n)ans--;
    int L=0,R=0;
    if(x==n)L=R=y;
    FOR(i,0,3) {
        int nx=x+drx[i],ny=y+dry[i];
        if(nx<=n&&nx>0&&ny>0&&ny<=m&&A[nx][ny].h<A[x][y].h) {
            Depth_First_Search(nx,ny);
            if(A[nx][ny].L&&A[nx][ny].R) {
                if(A[nx][ny].L<L||!L)L=A[nx][ny].L;
                if(A[nx][ny].R>R)R=A[nx][ny].R;
            }
        }
    }
    A[x][y].L=L,A[x][y].R=R;
    return;
    return;
    return;
}
void ShimaKZ() {
    memset(mark,0,sizeof(mark));
    FOR(i,1,m)Depth_First_Search(1,i);
    int t=0,i=1;
    int ans=0;
    for(i=1; i<=m&&t<m;) {
        int mx=t;
        while(i<=m&&A[1][i].L<=t+1) {
            if(A[1][i].R>mx)mx=A[1][i].R;
            i++;
        }
        ans++;
        t=mx;
    }
    puts("1");
    cout<<ans<<endl;
    return;
    return;
    return;
}
int main() {
    cin>>n>>m;
    ans=m;
    FOR(i,1,n)FOR(j,1,m)scanf("%d",&H[i][j]),A[i][j].h=H[i][j];
    FOR(i,1,m)Depth_First_Search(1,i);
    if(ans) {
        puts("0");
        cout<<ans<<endl;
        return 0;
    }
    ShimaKZ();
    return 0;
}

总结

  这次考得一般般,不过该水的分都水过来了,剩下的无能为力。总的来说,有些小细节还是要注意,其次,正难则反,终态枚举都是重要的思想,可以让解题轻松许多。
  这里写图片描述

天池离线赛 - 移动推荐算法(二):基于简单规则的预测 本文讨论如何运用一个简单的规则来进行预测,主要目的是感受一下天池赛答题评分的过程。 阅读详情

相关推荐

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

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

jackaroo_zyz的博客 3039

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

接上面两篇文章,只提取10个特征,是远远不够的。看了一些参加S2比赛的博客总结,先通过一些强规则(SQL)来确定结果。获取前一日(12.18)添加了购物车,当天没有购买过并且在商品子集中的 U-I组合。SQL写法:--筛选出12.18添加进购物车的 select  a.user_id,a.item_id   from  (select  * from   vipfin.tianchi_fresh_...

ronaldo-liu的博客 769

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

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

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

2017.11.09离线赛总结

kth ——3820思路:这是一道比较玄学的题目。 首先,此题一定是二分答案,且它的上界应为k,而前缀和直接维护仅只有90。不难发现每个数的方案数应该与它因子有关, 即x∗y=ix*y=i,不妨令x<yx<y,那么可以有x∈[1,sqrt(i)]x∈[1,sqrt(i)],y∈[sqrt(i),i]y∈[sqrt(i),i]。 可以简单地打表出x,y的分布会长成这样: y:i,i−j,i−j

Caristra的博客 310

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

天池大数据竞赛,新人离线赛。python(pandas,numpy,sklearn,lasagne....).zip

大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。

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

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

ronaldo-liu的博客 842

论文阅读------Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography

Mertens T, Kautz J, Van Reeth F. Exposure fusion: A simple and practical alternative to high dynamic range photography[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing Ltd, 2009, 28(1): 161-171. 摘要 本文提出了一种将包围曝光的序列融合到高质量图像中的技术,而无需先转换为高动态范围(HD.

qq_25283239的博客 3397

天池新人实战赛之[离线赛]之商品推荐

本篇文章以阿里天池的商品推荐项目为例子,介绍了通过spark的als模型来做商品推荐的方法,通过StreamingContext来实现断点继续。

简单,坚持 1820

PCB激光直接成像(LDI)设备技术解析与优化方案

激光直接成像(LDI)是PCB制造中的关键数字化工艺,通过激光束直接在基板上形成电路图案。其核心技术在于高精度光学系统与智能控制算法的结合,工作精度可达微米级。在HDI板、柔性电路等高端PCB制造中,LDI技术能显著提升线宽精度和层间对位准确性。当前行业面临材料适配性、热变形控制等挑战,动态能量补偿、多波长曝光等创新方案正在突破这些瓶颈。随着模块化设计、预测性维护等工程实践的普及,LDI设备综合效率持续提升,为5G、汽车电子等领域的精密电路生产提供关键技术支撑。

weixin_29168393的博客 394

【PDN仿真笔记9-使用Sigrity PowerDC进行IR Drop仿真的方法】

使用Sigrity PowerDC进行IR Drop进行仿真的方法

qq_42682826的博客 8007

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

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

wy的点滴 1万+

cadence virtuoso 激励信号源

vpulse,vpwl,vsin,vsource信号源介绍

努力学习的IC小白 3万+

TianChi新人赛之离线赛过程全纪录

原题地址:天池新人实战赛之[离线赛] 题目理解: 数据分为用户操作集D(tianchi_fresh_comp_train_user_2w.csv)和 商品子集P(tianchi_fresh_comp_train_item_2w),我们的任务即是利用D中数据训练得到模型,从P中商品选择出D中用户最可能购买的商品 利用 python 的 pandas 第三方包进行数据处理 删去无法利用的地理位置...

小黑屋 1638

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 391

模糊综合评价模型

一.引子 1.数学归纳法:同高中知识 2.秃子悖论:秃子悖论 这俩个例子都是类似于“量变引起质变”的道理,而在数学中我们把这类问题的性质叫做“模糊性”,在生活中我们也经常能遇到一些模糊的概念,比如年轻、帅、很少很多… 二.概述 模糊综合评价法是一种基于模糊数学的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象做出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。——来自百度百

The__Tyche的博客 2万+

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

上一篇文章已经将基本思路列出,现在已经根据第一篇文中的数据预处理方案处理出一个训练数据表 训练数据 11.22~11.27U-I集合行为数据 对应的大数据表名: temp_fin.temp_tianchi_train1_data 验证数据 11.29~12.04U-I集合行为数据 对应大数据表名:   数据预处理思路: 1.筛选一些异常的训练数据(只买不看的U-I组...

ronaldo-liu的博客 449

零基础学simulink仿真建模--基于Simulink进行农业机械用开关磁阻电机的仿真建模

特点结构简单:无电刷、换向器等易损件,维护成本低。坚固耐用:适合恶劣的工作环境,如农业机械作业现场。宽调速范围:通过适当的控制策略可以实现较宽的速度调节范围。挑战非线性特性:SRM的电磁特性和转矩特性具有高度非线性。复杂性:涉及电气、机械动力学以及控制系统的设计与集成。实时性要求:需要快速响应以适应不断变化的操作条件。多变量优化:包括电流控制、速度控制等多个方面需综合考虑。使用Simscape Electrical库来构建一个开关磁阻电机模型。

amy_mhd的博客 909

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

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

留歌__36的博客 661

【020】C++ 动态内存管理解析:new 和 delete 的正确使用

C++中的动态内存分配是在程序运行时根据需要进行内存空间的分配和释放,与静态内存分配相比,具有更大的灵活性和适应性。动态内存分配可以通过new和delete或者malloc()和free()等函数实现。在程序运行时无法确定所需的内存大小。需要在多个函数之间共享数据,并且数据可能被频繁地创建和销毁。静态数组无法满足需求,例如需要支持可变长度数组。如果在动态分配内存后忘记了释放它,则会导致内存泄漏。为避免内存泄漏,可以使用智能指针或手动管理内存的方式来释放动态分配的内存。

Lion_Long的博客 1471

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

ronaldo-liu的博客 1296

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

2017-9-28离线赛总结

失分小结:估分:220 实际分数:220 评价:第三题一道强模拟,代码功底太弱,只有puts(“-1”)的分 qwq知识漏洞 多练练一些恶心的模拟题 qwq考试过程: 第一题太水 直接模拟过了第二题想都没想就觉得是RMQ+尺取 结果RMQ不会打 强行倍增 结果复杂度膨胀成n*n*logn 后来回来打了个尺取 调了半天 复杂度缩为n*logn 后来发现直接前缀和维护O(n)

风雨兼程 423

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

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

天池新人离线赛:移动端推荐--Python+tensorflow小白实现

0. 结果代码请见github:https://github.com/jady3356/MachineLearning/tree/master/Tianchi/fresh_offline(注:几乎每行都有注释,但是不能直接跑,注释掉了很多特征提取的代码)这样的结果几乎可以用excel过滤来得到,由于我是ML,数据挖掘,python都是业余小白,仅仅是做练习用,请轻拍~1. 动机看了Ng老师的视频,...

weixin_41004669的博客 3561

天池体验(二)——新人离线赛数据可视化分析

查看原文:http://www.wyblog.cn/2016/12/16/%e5%a4%a9%e6%b1%a0%e4%bd%93%e9%aa%8c%e4%ba%8c-%e6%96%b0%e4%ba%ba%e7%a6%bb%e7%ba%bf%e8%b5%9b%e6%95%b0%e6%8d%ae%e5%8f%af%e8%a7%86%e5%8c%96%e5%88%86%e6%9e%90/ 查看原文:ht

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值