首页 > 其他分享 >初中信息奥赛模拟测试

初中信息奥赛模拟测试

时间:2024-01-16 21:58:51浏览次数:30  
标签:int void args write read 奥赛 初中 inline 模拟

初中信息奥赛模拟测试

终于是肯给 hzoi2024 整场模拟赛了。

题其实并不是很难。

但很有价值。

  1. ZEW 的游戏 (T2)

    显然是直接求斜率。

    注意判 \(0\)。

    因为绝对值小于 \(1000\),可以直接用小数。

    正经应该是写个分数存,也不难实现。

    小数:

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    const int N=405;
    int n;
    int cx[N],cy[N];
    unordered_set<double> c;
    inline double get(int xa,int ya,int xb,int yb){
        if(xa-xb==0) return 10000000000.0;
        return (ya-yb)*1.0/(xa-xb);
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&cx[i],&cy[i]);
            for(int j=1;j<i;j++) c.insert(get(cx[i],cy[i],cx[j],cy[j]));
        }
        cout<<c.size();
    }
    

    分数:

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long llt;
    typedef unsigned long long ull;
    #define For(i,a,b,c) for(register int $L=a,$R=b,$C=c,$D=(0<=$C)-($C<0),i=$L;i*$D<=$R*$D;i+=$C)
    const int N=202,INF=0x3f3f3f3f;
    set<pair<int,int> > c;
    int cx[N],cy[N];
    
    namespace IO{
        template<typename T> inline void write(T x){
            static T st[45];T top=0;if(x<0)x=~x+1,putchar('-');
            do{st[top++]=x%10;}while(x/=10);while(top)putchar(st[--top]^48);
        }
        template<typename T> inline void read(T &x){
            char s=getchar();x=0;bool pd=false;while(s<'0'||'9'<s){if(s=='-') pd=true;s=getchar();}
            while('0'<=s&&s<='9'){x=(x<<1)+(x<<3)+(s^48),s=getchar();}if(pd) x=-x;
        }
    }
    namespace IO{
        template<typename T,typename... Args> inline void read(T& x,Args&... args){read(x);read(args...);}
        inline void write(const char c){putchar(c);}
        inline void write(const char *c){int len=strlen(c);For(i,0,len-1,1) putchar(c[i]);}
        template<typename T> inline void Write(T x){write(x);putchar(' ');}
        inline void Write(const char c){write(c);if(c!='\n') putchar(' ');}
        inline void Write(const char *c){write(c);if(c[strlen(c)-1]!='\n') putchar(' ');}
        template<typename T,typename... Args> inline void write(T x,Args... args){write(x);write(args...);}
        template<typename T,typename... Args> inline void Write(T x,Args... args){Write(x);Write(args...);}
    }
    using namespace IO;
    inline pair<int,int> get(int xa,int ya,int xb,int yb){
        int x=xa-xb,y=ya-yb,gd=__gcd(x,y);
        if(x==0) return make_pair(INF,1);
        return make_pair(y/gd,x/gd);
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in_out/in.in","r",stdin);
        freopen("in_out/out.out","w",stdout);
    #endif
        int n;read(n);
        For(i,1,n,1){
            read(cx[i],cy[i]);
            For(j,1,i-1,1) c.insert(get(cx[i],cy[i],cx[j],cy[j]));
        }
        cout<<c.size();
    }
    
  2. ZEW 学分块 (T3)

    可以二分答案。

    虽然理论复杂度爆炸,但实际没卡到。

    正经做是双指针。

    枚举二三块的边界,贪心维护一下一二块。

    前缀和要开 longlong 实际上也没卡

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    const int N=5e6+5;
    int n,cu[N];
    long long qsum[N],ans=0x3f3f3f3f;
    inline long long Dis(int x,int y){
        return qsum[y]-qsum[x];
    }
    signed main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",cu+i),qsum[i]=qsum[i-1]+cu[i];
        int p=0;
        for(int i=1;i<=n;i++){
            while(p<=i&&abs(Dis(p,i)-Dis(0,p))>=abs(Dis(p+1,i)-Dis(0,p+1))) p++;
            ans=min(ans,max(Dis(0,p),max(Dis(p,i),Dis(i,n))));
        }
        printf("%lld",ans);
    }
    
  3. ZEW 玩 thd (T4)

    背包。

    显然是在最后补刀。

    考虑在第 \(i\) 个时人最多攻击几下,为容量。

    最少补的下数为代价。

    因为最后一下打掉 \(i\) 的话会使塔少攻击一次。

    所以代价加一。

    转移显然。

    因为容量是不确定的,最后要求 \(max\),因为可能没有转移到。

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long llt;
    typedef unsigned long long ull;
    #define For(i,a,b,c) for(register int $L=a,$R=b,$C=c,$D=(0<=$C)-($C<0),i=$L;i*$D<=$R*$D;i+=$C)
    const int N=202,W=2e5+3;
    int dp[W],p,q,n,w[N],v[N],wt[N],t;
    
    namespace IO{
        template<typename T> inline void write(T x){
            static T st[45];T top=0;if(x<0)x=~x+1,putchar('-');
            do{st[top++]=x%10;}while(x/=10);while(top)putchar(st[--top]^48);
        }
        template<typename T> inline void read(T &x){
            char s=getchar();x=0;bool pd=false;while(s<'0'||'9'<s){if(s=='-') pd=true;s=getchar();}
            while('0'<=s&&s<='9'){x=(x<<1)+(x<<3)+(s^48),s=getchar();}if(pd) x=-x;
        }
    }
    namespace IO{
        template<typename T,typename... Args> inline void read(T& x,Args&... args){read(x);read(args...);}
        inline void write(const char c){putchar(c);}
        inline void write(const char *c){int len=strlen(c);For(i,0,len-1,1) putchar(c[i]);}
        template<typename T> inline void Write(T x){write(x);putchar(' ');}
        inline void Write(const char c){write(c);if(c!='\n') putchar(' ');}
        inline void Write(const char *c){write(c);if(c[strlen(c)-1]!='\n') putchar(' ');}
        template<typename T,typename... Args> inline void write(T x,Args... args){write(x);write(args...);}
        template<typename T,typename... Args> inline void Write(T x,Args... args){Write(x);Write(args...);}
    }
    using namespace IO;
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in_out/in.in","r",stdin);
        freopen("in_out/out.out","w",stdout);
    #endif
        read(p,q,n); wt[0]=1;
        For(i,1,n,1){
            int h;
            read(h,v[i]);h--;
            wt[i]=wt[i-1]+(h/q+1);
            w[i]=(h%q/p+2);
        }
        For(i,1,n,1)
            For(j,wt[i],w[i],-1)
                dp[j]=max(dp[j],dp[min(wt[i-1],j-w[i])]+v[i]);
        int ans=0;
        For(i,1,wt[n],1) ans=max(ans,dp[i]);
        printf("%d",ans);
    }
    

标签:int,void,args,write,read,奥赛,初中,inline,模拟
From: https://www.cnblogs.com/xrlong/p/17968625

相关文章

  • LY1087 [ 20230217 CQYC模拟赛VIII T2 ] 记忆
    我们来看这样一道题:请你维护一个序列\(a\)。1k将所有\(a_i\)变成\(|a_i-k|\)。2lr求\(\sum_{i=l}^{r}a_i\)。\(n,q\le10^5\)。首先我们不难写出一个\(naive\)的代码。#include<iostream>#include<algorithm>#include<cstdio>#include<arra......
  • AD采集卡设计方案:630-基于PCIe的高速模拟AD采集卡
     基于PCIe的高速模拟AD采集卡一、产品概述   基于PCIe的一款分布式高速数据采集系统,实现多路AD的数据采集,并通过PCIe传输到存储计算服务器,实现信号的分析、存储。    产品固化FPGA逻辑,适配2路1Gsps/2路2Gsps采集,实现PCIe的触发采集,单次采集容量2G......
  • 初中英语优秀范文100篇-059Let’s Play Basketball-让我们打篮球吧
    PDF格式公众号回复关键字:SHCZFW059记忆树1Playingbasketballhasseveraladvantages.翻译打篮球有很多好处简化记忆好处句子结构主语是"Playingbasketball",表示一种活动。谓语是"has",是第三人称单数形式,表示现在完成时态。宾语是"severaladvantages",是一个名......
  • 1.15模拟赛 T2题解
    简要题意多重背包但是乘法思路暴力就直接跑背包考虑乘法能否变为加法,可以找到模数的原根,将每个数映射一下,这样乘法就变成了加法,可以直接\(\text{bitset}\)优化,但是暴力这样做还是过不了于是我们考虑二进制分组优化背包,这样复杂度貌似就对了?code#pragmaGCCoptimize("Ofast......
  • 开关量、数字量、模拟量、离散量和脉冲量它们之间有什么区别?
    开关量、数字量、模拟量、离散量和脉冲量是电子测量和控制系统中经常遇到的不同类型的数据。它们在定义、特性和应用方面存在差异。在电子测量和控制系统设计中,根据实际需求选择合适的数据类型是至关重要的。定义与特点 开关量(SwitchingQuantity)开关量是一种只有两种状态......
  • XL6601系列ACMP模拟比较器使用
    目录模拟比较器(ACMP)简介特性实现结构框图Demo官方解释功能说明正输入与负输入输出输出标志中断设置与操作模拟比较器(ACMP)实现一个简单的小功能,掉电检测,使用到了ACMP外设,认为学习东西后总得产出点什么,所以在此简单记录一下。简介特性模拟比较器模块(ACMP)提供一个用于比较两......
  • 初中英语优秀范文100篇-058The Importance of Doing Sports-做运动的重要性
    PDF格式公众号回复关键字:SHCZFW058记忆树1Nowadays,moreandmorepeopleprefertostayathomewatchingTVandsurfingtheInternet,whichleadstofatnessandevenseriousillness.翻译如今,越来越多的人更喜欢待在家里看电视和上网,这导致了肥胖,甚至严重的疾病......
  • 4.【初中信息奥赛模拟测试】
    \(\Huge{打了一场模拟赛,又垫底了。qwq}\)初中信息奥赛模拟测试T1ZEW玩扫雷\(100pts\)定义\(\largeans_i{_,}{_j}\)为如果\((i,j)\)这个地块不是雷,旁边有多少个雷,枚举每一个点周围八个地块,如果是空地则不变,如果是雷就加一。时间复杂度为\(O(n*m)\)include<bits/st......
  • 初中信息奥赛模拟测试
    初中信息奥赛模拟测试T1ZEW玩扫雷\(n\)和\(m\)都是小的,枚举即可。#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;constintN=1010;template<typenameTp>inlinevoidread(Tp&x){x=0;registerboolz=1......
  • 模拟 - CF1196C Robot Breakout
    RobotBreakout(CF1196C)思路这道题因为平面极大,暴力枚举每个点肯定会超时。所以,我们不妨从机器人出发。我们可以枚举每个机器人可以执行的操作:位置从\((X_i,Y_i)\)变为\((X_i-1,Y_i)\),即向左走。位置从\((X_i,Y_i)\)变为\((X_i,Y_i+1)\),即向上走。位置从\((X_......