NOIP2011提高组 DAY2 题解&总结

P1003 [NOIP 2011 提高组] 铺地毯 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。 阅读详情

考试时的心态:


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

题解:

第一题:计算系数


  这道题是道水题,纯属送分,只要把杨辉三角计算出来,再使用快速幂,处理出系数就可以了。不多解释。
  附上AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define M 1050
#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;
const int P=10007;
const int S=20;
//ÎļþÃû Êä³öµ÷ÊÔ cstdio long long 1LL
int a,b,k,m,n;
int dp[M][M];//¼ÆËãÑî»ÔÈý½Ç
struct water {
    void solve() {
        dp[1][1]=1;
        FOR(i,2,k+1) {
            FOR(j,1,i) {
                dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%P;
            }
        }
        cout<<dp[k+1][m+1]<<endl;
    }
} p50;
struct _pAC {
    int fast(int a,int b) {
        int res=1;
        int x=a;
        while(b) {
            if(b&1) {
                res=(res*x)%P;
            }
            b/=2;
            x=(x*x)%P;
        }
        return res;
    }
    void solve() {
        dp[1][1]=1;
        if(!(a||b||k||n||m)) {
            puts("0");
            exit(0);
        }
        FOR(i,2,k+1) {
            FOR(j,1,i) {
                dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%P;
            }
        }
        long long ans;
        ans=(1LL*(fast(a,n)*fast(b,m))%P*dp[k+1][m+1])%P;
        cout<<ans<<endl;
    }
} pAC;
int main() {
    cin>>a>>b>>k>>n>>m;
    pAC.solve();
    return 0;
}

第二题:智障质检员:


  这道题显然可以用二分法来写,要注意的是S属于[1,1e12],因此要用long long 来存储。除此之外就是对W进行二分查找了。
  至于为什么用二分法,我们不难看出,当W变小时,满足条件的j会变多,Y自然会变大,因此Y与W的关系是单调的。
  之后就是对这个Sigma的处理了。
  这个问题也是比较好处理的。我们只需要用前缀和优化一下就好了。
  先预处理出1到i区间中的满足条件的j的数量cnt[i],同时记录满足条件的价值和val[i]。
  对于每一个区间[L,R]只需要计算出(cnt[B[i].R]-cnt[B[i].L-1])*(val[B[i].R]-val[B[i].L-1])即可。
  附上AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
#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;
ll stan;
struct Stone {
    int value,weight;
} A[M];
struct node {
    int L,R;
} B[M];
ll cnt[M];
ll val[M];
long long res;
long long check(int mid){
    cnt[0]=val[0]=0;
    FOR(i,1,n){
        cnt[i]=cnt[i-1];
        val[i]=val[i-1];
        if(A[i].weight>=mid) {
            cnt[i]++;
            val[i]+=A[i].value;
        }
    }
    res=0;
    FOR(i,1,m)res+=1LL*(cnt[B[i].R]-cnt[B[i].L-1])*(val[B[i].R]-val[B[i].L-1]);
    return res;
}
int main() {
    cin>>n>>m>>stan;
    int R=0,L=2e9;
    FOR(i,1,n)scanf("%d%d",&A[i].weight,&A[i].value),R=max(R,A[i].weight),L=min(L,A[i].weight);
    FOR(i,1,m)scanf("%d%d",&B[i].L,&B[i].R);
    int l=0,r=R;
    long long ans=2e14;
    while(l<=r) {
        int mid=(l+r)>>1;
        ll y=check(mid);
        ans=min(ans,abs(y-stan));
        if(y<stan)r=mid-1;
        else l=mid+1;
    }
    cout<<ans<<endl;
    return 0;
}

第三题:观光公交:


  这道题是一道贪心题。它的基本决策如下:每一次我们肯定会选择车上人数最多的一条道路使用加速器。但是,如果有人迟到了,那么用了跟没用一样。因此我们就要在没有人会迟到,使用人数最多的那条道路上使用加速器。
  因此我们的贪心决策就很明显了。接下来就是复杂度的问题。
  我们可以看到如果我们对于每一个k都扫一遍进行决策的话,显然要用前缀和进行优化。而倒着使用前缀和显然会给我们的运算带来许多方便。对于这道题,由于我们进行的仅仅是判断与加减语句,复杂度常数非常小。因此O(n*k)的复杂度显然是能过的(虽然有一亿……)。
  附上AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ShimaKZ 404 Not Found
#define M 100086
#define max sdjkl
#define min sdjll
#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,k;
int dis[M];
int leave[M];
int arrive[M];
int sum[M];
int down[M];
int ans=0;
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
inline void checkmax(int &a,int b){if(b>a)a=b;}
inline void checkmin(int &a,int b){if(b<a)a=b;}
int main(){
    cin>>n>>m>>k;
    FOR(i,1,n-1)scanf("%d",&dis[i]);
    FOR(i,1,m){
        int t,a,b;
        scanf("%d%d%d",&t,&a,&b);
        checkmax(leave[a],t);
        ans-=t;
        down[b]++;
    }
    while(k--){
        FOR(i,1,n)arrive[i]=max(arrive[i-1],leave[i-1])+dis[i-1];
        int now=0;
        DOR(i,n,2){
            if(!dis[i-1])sum[i-1]=0;
            else{
                sum[i-1]=down[i];
                if(arrive[i]>leave[i])sum[i-1]+=sum[i];
            }
        }
        int id=0,max=0;
        FOR(i,1,n-1){
            if(sum[i]>max){
                max=sum[i];
                id=i;
            }
        }
        dis[id]--;
    }
    FOR(i,1,n)arrive[i]=max(arrive[i-1],leave[i-1])+dis[i-1];
    FOR(i,1,n)ans+=arrive[i]*down[i];
    cout<<ans<<endl;
    return 0;
}

总结:


  这次考试考得很迷……有很多不该错的地方犯了一些错误。其实第二题我完全没有必要进行对拍,你说前缀和优化和直接循环在结果上有什么区别呢?因此对于一些显然对的算法,就没有必要进行对拍了。对拍反而是徒劳。因此在这种情况下,不如多去考虑一下二分的边界以及自己的代码有没有什么漏洞,能不能用一些数据来进行hack。没有考出应有的水平,这是比不会写要伤很多的情况。下次要避免啊。

P1003 [NOIP2011 提高组] 铺地毯 题解作业 阅读详情

相关推荐

[NOIP2011真题]选择客栈

题目背景 NOIP2011提高组 DAY1 试题。题目描述 丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从 1 到 n 编号。每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一

g19zwk的博客 2753

洛谷 P1313 计算系数

杨辉三角+快速幂

sdfzrlt的博客 832

noip2011赛前模拟day2

noip2011赛前模拟day2,希望对大家拿一等奖有帮助。

NOIP2011提高组解析

题目描述: 铺地毯  选择客栈  Mayan游戏 计算系数 聪明的质检员 观光公交 day1: 铺地毯: 只有一个需要注意的地方:给出的g和k不是右下角的坐标,右下角坐标应是(a+g,b+k) 倒序判断即可。 参考程序: #include #include #define maxn 1100000 using namespace std; int x1[maxn],x

Holylight_Knight 3083

Isaac Sim 6 利用Replicator实现高效语义分割与实例分割(实践指南5.10)

本文详细介绍了如何利用Isaac Sim 6的Replicator工具高效生成语义分割和实例分割数据集。通过虚拟环境自动标注,效率提升20倍以上,特别适用于农业机器人等计算机视觉项目。文章包含环境配置、场景构建、批量标注技巧及实例分割处理等实战指南,帮助开发者快速掌握合成数据生成技术。

weixin_42526415的博客 266

FastAPI + React:现代 Web 前后端分离开发的全栈实践指南

• 部署:CI/CD 双流水线,前端 push → GitHub Actions → Cloudflare Pages;• 后端:分层结构 routers → services → repositories → models,单测覆盖率 90 %。• 接口缓存:Redis + FastAPI Depends 实现接口级缓存,读 QPS 提升至 5 k。• 前端:BFF 由 React Query 代理,统一缓存、重试、分页。GET /items/{id} 详情。,前端同学无需等 Mock 即可联调。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 1494

NOIP2011提高组题解

NOIP2011提高组题解

Jack_Wangpeixin的博客 594

银河麒麟V10离线环境下的Python项目迁移:从Windows依赖到ARM架构适配

本文详细介绍了在银河麒麟V10离线环境下将Python项目从Windows迁移到ARM架构的完整流程。重点讲解了离线安装pip、virtualenv等基础工具的方法,以及如何解决ARM架构兼容性问题,确保项目依赖正确迁移。文章还提供了常见问题解决方案和性能优化建议,帮助开发者顺利完成国产化平台适配工作。

weixin_42639246的博客 423

P1003 [NOIP2011 提高组] 铺地毯 ---Java

题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 nn 张地毯,编号从 11 到 nn。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。 地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。 输入格式 输入共 n + 2n+2 行。 第一行,一个整数 nn,表示总共有 nn 张地毯。 接下来的 nn 行中,第

weixin_44048403的博客 603

今天出一个candence 17.4 allego的安装教程

7、安装完成,接下来进行补丁更新,找到Hotfix_SPB17.40.035_wint.iso软件 ,右击鼠标选择装载。6、因为之前选择的定制安装,这一步不知道具体要安装啥,因此都勾选,点击NECK,接下来等待安装完成。后面经过仔细对比,发现是前面更新补丁时选择了F盘,F盘是candence安装包,不是补丁。8、在破戒大师里选择安装更新补丁,并找到刚才装载的安装包里的程序,点击下一步。3、打开破戒大师,找到安装candence进行如下图选择,点击下一步。有耐心的人可以重新卸了再装一边,我就不卸了,直接装。

hcvinh的博客 2727

通达信浮筹多空波段抓牛擒龙指标公式源码

VAR33:=VA3>=REF(VA4,1) AND C<REF(C,1) AND VAR19=60 AND VAR18=0 AND 活跃线>=REF(活跃线,1) AND VA12<REF(VA13,1);DRAWTEXT(VAR28 AND COUNT(VAR28,30)=1,65,' ★超涨注意风险'),COLOR0000FF;DRAWTEXT(VAR26 AND COUNT(VAR26,30)=1,90,' ←继续等'),COLOR00FFFF;浮筹线:VA3,COLORFF00FF;

2401_86043146的博客 5269

NOIP2011提高组 P1313

NOIP2011提高组 二项式定理

conti123的博客 145

【操作系统】 Operation System 第二章:操作系统基础操作

2.1 操作系统的启动 (1)CPU, I/O, 内存通过总线连接。 (2)DISK:存放OS; BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。 (3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0. (4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否...

iwanderu的博客 1万+

【C++ 真题】P1003 [NOIP 2011 提高组] 铺地毯

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

Ω 1279

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs. Replicate the

Debezium报错处理系列之第112篇:Cannot replicate because the master purged required binary logs.

zhengzaifeidelushang的博客 727

Test软件:Keysight二次开发_(1).Keysight软件开发概述

VISA(Virtual Instrument Software Architecture)库是Keysight提供的一种标准化的仪器控制接口,支持多种编程语言和开发环境。仪器通信:通过GPIB、USB、以太网等接口与仪器进行通信。数据采集:从仪器中获取测量数据。命令发送:向仪器发送控制命令。错误处理:处理通信过程中可能出现的错误。测试自动化是指通过编写脚本或程序来自动执行测试任务,从而提高测试效率和减少人为错误。Keysight的测试设备和仪器支持多种编程语言和开发环境,使得测试自动化变得相对容易。

2401_87715305的博客 1359

洛谷————P1003 [NOIP 2011 提高组] 铺地毯

现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。接下来的 n 行中,第 i+1 行表示编号 i 的地毯的信息,包含四个整数 a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标 (a,b) 以及地毯在 x 轴和 y 轴方向的长度。如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点 (2,2) 的最上面一张地毯是 3 号地毯。第 n+2 行包含两个整数 x 和 y,表示所求的地面的点的坐标 (x,y)。

2401_86810542的博客 1867

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【NOIP 2011 提高组 Day1】

对于 30%的数据,初始棋盘上的方块都在棋盘的最下面一行;

Double020的博客 219

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[NOIP2011提高组Day1T2]选择客栈

[NOIP2011提高组Day1T2]选择客栈,枚举 + 优化。

少儿编程乔老师 727

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【NOIP 2011 提高组 Day2】

# 题目 A 【NOIP 2011 提高组 Day2】计算系数 B 【NOIP 2011 提高组 Day2】聪明的质监员 C 【NOIP 2011 提高组 Day2】观光公交 A. 【NOIP 2011 提高组 Day2】计算系数 考试时看到这题我就被吓住了,不会是数论吧?? 我数论菜的一塌糊涂,, 不管怎么第一题也不能爆零啊,打表也得给他打出...

Double020的博客 242

[NOIP2011 提高组] 铺地毯

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

illhm的博客 702

P1003 [NOIP2011 提高组] 铺地毯【暴力】

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。

海岛Blog 657

NOIP2011-2018提高组解题报告

NOIP2011-2018提高组解题报告

青少年趣味编程 538

学习记录 DAY3 洛谷 P1003 [NOIP 2011 提高组] 铺地毯

再写个CPP的算法题,今日算法这里就先收工!

m0_71603576的博客 2154
上一篇: dfs玄学剪枝法集锦
下一篇: NOIP2014 Day2 模拟赛赛后总结&题解
Shima_KaZe
博客等级 码龄9年 16粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值