NOIP2011 提高组合集「建议收藏」

NOIP2011 提高组合集「建议收藏」NOIP2011提高组合集D1T1铺地毯模拟,题目让你干啥你就干啥#include<iostream>#include<cstdio>usingnamespacestd;intx[100010],y[100010],dx[100010],dy[100010];intmain(){intn;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

NOIP 2011 提高组合集

D1 T1 铺地毯

模拟,题目让你干啥你就干啥

#include <iostream>
#include <cstdio>
using namespace std;
int x[100010],y[100010],dx[100010],dy[100010];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d%d%d%d",&x[i],&y[i],&dx[i],&dy[i]);
    int a,b;
    scanf("%d%d",&a,&b);
    int r=-1;
    for(int i=1;i<=n;i++)
    {
        if(a>=x[i]&&a<=x[i]+dx[i]&&b>=y[i]&&b<=y[i]+dy[i]) r=i;
    }
    printf("%d\n",r);
    return 0;
} 

D1 T2 选择客栈

做的时候好像麻烦了。我的做法是对于一个可以当接头地点的店,考虑它的贡献。为了避免算重,我们令它是左端点往右走的第一个满足条件的店。说是第一个满足条件,但是不一定非要在这里吃。

然后根据这个节点的往右走第一个不满足的,乘以右边的所有点,更新答案。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010 
#define M 60
using namespace std;
typedef long long ll;
int a[N],b[N],f[N][M];
int main()
{
    int n,k,p; cin >> n >> k >> p ;
    for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
    for(int i=n;i>=0;i--)
    {
        for(int j=0;j<k;j++)
        {
            f[i][j]=f[i+1][j];
            if(a[i]==j&&i) f[i][j]++;
        }
    }
    // for(int i=1;i<=n;i++) printf("%d %d\n",f[i][0],f[i][1]);
    int bfr=0; ll ans=0;
    for(int i=1;i<=n;i++)
    {
        if(b[i]>p) continue;
        for(int j=0;j<k;j++)
        {
            ans+=1ll*(f[bfr+1][j]-f[i+1][j])*f[i+1][j];
            // ans+=(f[bfr+1][j]-f[i][j]);
        }
        ans+=f[bfr+1][a[i]]-f[i][a[i]];
        bfr=i;
    }
    printf("%lld\n",ans); return 0;
}

D1 T3 Mayan游戏

挖坑代填

D2 T1 计算系数

知道二项式定理这题是sb题。

#include <bits/stdc++.h>
#define mod 10007 
using namespace std;
typedef long long ll;
ll quick_power(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1) ans=(ans*a)%mod;
        b>>=1;
        a=(a*a)%mod;
    }
    return ans;
}
ll before[1010];
int main()
{
    before[0]=1;
    for(ll i=1;i<=1000;i++)
    {
        before[i]=before[i-1]*i%mod;
    }
    ll a,b,k,n,m;
    cin >> a >> b >> k >> n >> m ;
    // a%=mod,b%=mod;
    printf("%lld\n",quick_power(a,n)%mod*quick_power(b,m)%mod*before[k]%mod
        *(quick_power(before[n],mod-2)%mod*quick_power(before[k-n],mod-2)%mod)%mod);
}

D2 T2 聪明的质检员

考虑二分,然后直接暴力枚举验证即可,时间复杂度为O(logn(n+m))。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010 	
using namespace std; typedef long long ll; int n,m; ll S;
int f[N]; ll g[N]; ll L[N],R[N],w[N],v[N];
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
ll rd() {ll x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
ll check(int x)
{
    f[0]=0,g[0]=0;
    for(int i=1;i<=n;i++)
    {
        f[i]=f[i-1]; g[i]=g[i-1];
        if(w[i]>=x) f[i]++,g[i]+=v[i];
    }
    ll ans=0;
    for(int i=1;i<=m;i++) ans+=1ll*(g[R[i]]-g[L[i]-1])*(f[R[i]]-f[L[i]-1]);
    return ans;
}
int main()
{
    n=rd(),m=rd(),S=rd(); ll maxn=0; for(int i=1;i<=n;i++) w[i]=rd(),v[i]=rd(),maxn=max(maxn,v[i]);
    for(int i=1;i<=m;i++) L[i]=rd(),R[i]=rd();
    ll l=0,r=maxn+1; ll minn=1000000000000000000ll;
    while(l<r)
    {
        int mid=(l+r)>>1;
        ll now=check(mid); minn=min(minn,abs(now-S));
        if(now<S) r=mid;
        else l=mid+1;
    }
    printf("%lld\n",minn);
return 0;
}

D2 T3 观光公交

我们考虑每一个加速器的利与弊即可。如果到达了之后还是需要等,我们减少了以等的那个节点为终点的乘客的时间。如果到达了直接走,我们节省了所有人的时间。所以我们可以贪心地做这个事情。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 20010 
using namespace std;
struct node
{
    int start,arrive,target;
}a[N];
int n,m,K,ans;
int f[N],Time[N],g[N],dist[N],sum[N];
int main()
{
    scanf("%d%d%d",&n,&m,&K);
    for(int i=1;i<n;i++)
        scanf("%d",&dist[i]);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a[i].arrive,&a[i].start,&a[i].target);
        f[a[i].start]=max(f[a[i].start],a[i].arrive);
        sum[a[i].target]++;
    }
    for(int i=2;i<=n;i++)
        sum[i]+=sum[i-1];

    Time[1]=0;
    for(int i=2;i<=n;i++)
        Time[i]=max(Time[i-1],f[i-1])+dist[i-1];
    for(int i=1;i<=m;i++)
        ans+=Time[a[i].target]-a[i].arrive;
    while(K)
    {
        g[n]=n;
        g[n-1]=n;
        for(int i=n-2;i;i--)
        {
            if(Time[i+1]<=f[i+1])
                g[i]=i+1;
            else g[i]=g[i+1];
        }
        int Max=0,j;
        for(int i=1;i<=n;i++)
            if(sum[g[i]]-sum[i]>Max&&dist[i]>0)
                Max=sum[g[i]]-sum[i],j=i;
        if(!Max) break;
        ans-=Max;
        dist[j]--;
        K--;
        Time[1]=0;
        for(int i=2;i<=n;i++)
            Time[i]=max(Time[i-1],f[i-1])+dist[i-1];
    }
    cout << ans << endl ;
    return 0;
}

转载于:https://www.cnblogs.com/ShuraK/p/9589056.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189873.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月6日 下午11:43
下一篇 2026年3月7日 上午7:22


相关推荐

  • motan用户开发指南

    motan用户开发指南目录基本介绍架构概述模块概述配置概述使用 Motan 工程依赖处理调用异常配置说明协议与连接 motan protocol 介绍 Motan 协议本地调用注册中心与服务发现 motan registry 介绍使用 Consul 作为注册中心使用 Zookeeper 作为注册中心不使用注册中心服务提供方 motan service 介绍

    2026年3月18日
    2
  • Vue 插槽(slot)详细介绍(对比版本变化,避免踩坑)

    Vue 插槽(slot)详细介绍(对比版本变化,避免踩坑)Vue中的插槽(slot)在项目中用的也是比较多的,今天就来介绍一下插槽的基本使用以及Vue版本更新之后的插槽用法变化。感谢大家支持,该版本为优化版,文章重新排版,优化阅读体验。

    2025年8月8日
    4
  • 《抓住听众心理——演讲者要知道的100件事》一第 1 章 人们是怎样思考和学习的…

    《抓住听众心理——演讲者要知道的100件事》一第 1 章 人们是怎样思考和学习的…本节书摘来异步社区《抓住听众心理——演讲者要知道的100件事》一书中的第1章,第1.1节,作者:【美】SusanM.Weinschenk译者:杨妩霞,杨煜泳责编:赵轩,更多章节内容可以访问云栖社区“异步社区”公众号查看。第1章 人们是怎样思考和学习的抓住听众心理——演讲者要知道的100件事“我从来没有‘教导’过我的学生;我只是尝…

    2025年11月3日
    4
  • oh-my-zsh 国内安装及配置

    oh-my-zsh 国内安装及配置安装 zshubuntu 下 sudoapt getinstallzs 安装 oh my zshwgethttps gitee com mirrors oh my zsh raw master tools install sh 然后给 install sh 添加权限 chmod xinstall sh 然后执行 install sh install sh 如果发现很慢 可以修改为 gitee viminstall sh 进入编辑状态 找到以下部分 Defaultset

    2026年3月19日
    2
  • 计算立方体,圆柱,圆锥体积的小程序是啥_计算圆柱体体积的程序

    计算立方体,圆柱,圆锥体积的小程序是啥_计算圆柱体体积的程序#include<iostream>#include<cmath>usingnamespacestd;voidvolume_square();//立方体体积函数声明voidvolume_cylinder();//圆柱体积函数声明voidvolume_cone();//圆锥体积函数声明intmain(){intchoice=-1;…

    2025年11月19日
    9
  • SimpleDateFormat 常用用法[通俗易懂]

    SimpleDateFormat 常用用法[通俗易懂]1、SimpleDateFormat函数语法:G年代标志符y年M月d日h时在上午或下午(1~12)H时在一天中(0~23)m分s秒S毫秒E星期D一年

    2022年7月3日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号