首页 > 其他分享 >2024初三集训模拟测试1

2024初三集训模拟测试1

时间:2024-02-17 17:55:30浏览次数:31  
标签:int void long 2024 inline 初三 集训 dp out

2024初三集训模拟测试1

所以正解和一行 \(-1\) 等分

  1. T1 edit:

    语法题。

    getline 正确使用

  2. T2 game:

    简单 \(dp\)

    也可以贪心,见 The_Shadow_Dragon

    注意初始化。

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    using llt=long long;
    using ull=unsigned long long;
    #define For(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
    #define For_(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
    const int N=1e5+3;
    int n,a[N];
    llt dp[N][3];
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in_out/in.in","r",stdin);
        freopen("in_out/out.out","w",stdout);
    #else
        freopen("game.in","r",stdin);
        freopen("game.out","w",stdout);
    #endif
        scanf("%d",&n);
        For(i,1,n,1) scanf("%d",a+i);
        sort(a+1,a+1+n,greater<int>());
        dp[1][1]=a[1];dp[1][0]=-0x3f3f3f3f3f3f3f3f;
        For(i,2,n,1){
            dp[i][0]=dp[i-1][1];
            dp[i][1]=max(dp[i-1][0],dp[i-1][1])+a[i];
        }
        printf("%lld",max(dp[n][0],dp[n][1]));
    }
    
  3. T3 score:

    发现值域很小,直接枚举平均数。

    将所有数减掉平均数,就变成了序列中选区间和为 \(0\)。

    前缀和,变成了选序列中值一样两个数的方案,桶维护即可。

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long llt;
    typedef unsigned long long ull;
    #define For(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
    #define For_(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
    const int N=1e5+3,R=1e7;
    int to[(R<<1)+3],a[N],ma,n;
    llt ans;
    
    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> T READ_NONPARAMETRIC_INIT;
        template<typename T = int> inline T read(T &x=READ_NONPARAMETRIC_INIT<T>){
            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; return x;
        }
    }
    namespace IO{
        template<> inline char read(char &c){c=getchar();while(c<33||c>126) c=getchar();return c;}
        template<int MAXSIZE=INT_MAX> inline int read(char* c){
            char s=getchar();int pos=0;while(s<33||s>126) s=getchar();
            while(s>=33&&s<=126&&pos<=MAXSIZE) c[pos++]=s,s=getchar();c[pos]='\0';return pos;
        }
        template<typename T,typename... Args> inline void read(T& x,Args&... args){read(x);read(args...);}
        template<> inline void write(char c){putchar(c);}
        template<> inline void write(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(' ');}
        template<> inline void Write(char c){write(c),putchar(' ');}
        template<> inline void Write(char *c){write(c),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 void Cnt(int arg){
        int qs=0;to[R]=1;
        For(i,1,n,1){
            qs+=a[i]-arg;
            ans+=to[qs+R]++;
        }
        qs=0;
        For(i,1,n,1){
            qs+=a[i]-arg;
            to[qs+R]--;
        }
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in_out/in.in","r",stdin);
        freopen("in_out/out.out","w",stdout);
    #else 
        freopen("score.in","r",stdin);
        freopen("score.out","w",stdout);
    #endif 
        read(n);
        For(i,1,n,1) ma=max(ma,read(a[i]));
        For(i,1,ma,1) Cnt(i);
        write(ans);
    }
    
  4. T4 city

    首先先并查集一下将点分成一些连通块。

    发现最小加边要最大化单点个数,最大加边就要最大化最大连通块点的个数。

    所以从大到小合并,求最小最大加边。

    对于块之间的边最少不加,最多每个点向对面连单向边,也就是 \(size1\times size2\) 的。

    判断完直接加边即可。

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    using llt=long long;
    using ull=unsigned long long;
    #define For(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
    #define For_(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
    const int N=5e5+3;
    int n,m,cx,q,bs;
    llt ma,mi;
    vector<int> c[N];
    class FIND{
    private:
        int f[N];
    public:
        FIND(){For(i,1,N-2,1) f[i]=i;}
        inline int Get(int x){return f[x]==x?x:f[x]=Get(f[x]);}
        inline void Uni(int a,int b){int fa=Get(a),fb=Get(b); if(fa!=fb) f[fb]=fa;}
    }fd;
    bool cmp(vector<int> a,vector<int> b){return a.size()>b.size();}
    
    int main(){
        freopen("city.in","r",stdin);
        freopen("city.out","w",stdout);
        scanf("%d%d%d%d",&n,&m,&cx,&q);
        For(i,1,q,1){
            int a,b;scanf("%d%d",&a,&b);
            fd.Uni(a,b);
        }
        For(i,1,n,1) c[fd.Get(i)].push_back(i);
        sort(c+1,c+1+n,cmp);
        For(i,1,n,1){
            if(c[i].empty()) break;
            bs++;
        }
        int lcbs=bs,csum=0;
        For(i,2,lcbs,1){
            if(bs<=cx) break;
            int len=c[i].size();
            For_(j,len-1,0,1) c[1].push_back(c[i][j]),c[i].pop_back();
            bs--;
        }
        if(bs!=cx){puts("-1");return 0;}
        sort(c+1,c+1+n,cmp);
        For(i,1,bs,1){
            int sz=c[i].size();
            ma+=1ll*sz*(sz-1);
            mi+=((sz<=1)?0:sz);
        }
        if(m<mi||m>ma) {puts("-1");return 0;}
        For(k,1,bs,1){
            int len=c[k].size();
            if(len<=1) continue;
            printf("%d %d\n",c[k][len-1],c[k][0]);
            For(i,1,len-1,1) printf("%d %d\n",c[k][i-1],c[k][i]);
        }
        For(k,1,bs,1){
            if(mi>=m) return 0;
            int len=c[k].size();
            For(i,0,len-2,1){
                For(j,0,len-1,1){
                    if(i==j||i+1==j) continue;
                    printf("%d %d\n",c[k][i],c[k][j]);
                    mi++;
                    if(mi>=m) return 0;
                }
            }
            For(j,1,len-2,1){
                printf("%d %d\n",c[k][len-1],c[k][j]);
                mi++;
                if(mi>=m) return 0;
            }
        }
    }
    

    这题其实就是头图的题,所以我和 wkh2008 整了份 SPJ。

    然后就被我错解肆意水过:

    后来直接不改了,反正正解能过不是,觉得只要不太离谱就不会挂。

    \(\huge

    标签:int,void,long,2024,inline,初三,集训,dp,out
    From: https://www.cnblogs.com/xrlong/p/18018174

相关文章

  • 2024.2.17模拟赛T1题解
    先考虑\(q=(1...n)\)的情况:发现如果设\(divcnt(p)\)表示将\(p\)划分为极小值域连续段的个数,那满足\(divcnt(p)\gem\)的排列都是合法的。那现在要求出有多少个排列符合条件可以先算出长度为\(i\),\(divnct\)为\(1\)的排列个数,这可以用dp解决然后再背包一下,就能求......
  • 2024-02-17-物联网C语言(4-预处理)
    4.预处理4.1c语言的编译过程gcc-Ehello.c-ohello.i#1.预编译gcc-Shello.i-ohello.s#2.编译gcc-chello.s-ohello.o#3.汇编gcchello.o-ohello_elf#4.链接预编译将.c中的头文件展开、宏展开编译将预处理之后的.i文件生成.s汇编文件......
  • IDEA 2024.1:Spring支持增强、GitHub Action支持增强、更新HTTP Client等
    有段时间没有更新IDEA了,早上看到IntelliJIDEA2024.1EAP5发布的邮件提示,瞄了一眼,发现真的是越来越强了,其中不少功能对我来说还是非常有用的。也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下。Spring、Quarkus等主流框架的支持增强SearchEverywhere功能......
  • 2024寒假集训纪要 & 闲话 (下半)
    2.16本来说要写\(4\)道多项式的题的,到最后算上\(\text{AC}\)自动机之类的也没\(4\)道题\(\color{white}{唔,我好想补完春节期间在家看的『约会大作战(第三部)』啊,但是我没有【数据删除】所以看不了诶}\)明天似乎有模拟赛?寄寄寄寄寄寄寄寄寄寄搞了个题单,但是看起来意义不......
  • 2024-02-17 有一个观点有松动了,没房没车没存款,配不配
       2024-02-17     好像挺根深蒂固的,没房没车没存款,都没有资格结婚恋爱,在女人面前也很自卑。   直到我叔和婶娘,跟我说,这个不讲配不配得上,而是讲缘分的。举了现实的例子,富家女嫁穷小伙的,帮穷小伙买车买房。   还有一些外省嫁过来的。还有我们家,几个叔......
  • 2024-02-17-物联网C语言(3-函数)
    3.函数3.1函数的概念函数是c语言的功能单位,实现一个功能可以封装一个函数实现。定义一个函数的时候需要一切以功能为目的,根据功能去定义函数的参数和返回值。3.2函数的分类3.2.1从定义角度分类库函数(c库实现)自定义函数(程序员自定义函数)系统调用(操作系统实现的函数)3.......
  • 2024 寒假做题总结
    P2146[NOI2015]软件包管理器思路分析树链剖分板子,每次安装时,将\(1\)到\(x\)的链变为\(1\),卸载时,将\(x\)的子树变为\(0\)。代码#include<iostream>usingnamespacestd;inlineintread(){registerintx=0,f=1;registercharc=getchar();while(c<'0'......
  • 刷题记录_2024寒假2/17
    我都AFO了为什么还要我写题目P多少多少默认洛谷P3313旅行题意略,自己不会看吗考虑对每个信仰开一个线段树,下标为dfs序,然后就是树剖板子对于这种开一堆动态开点线段树的题目可以存每个线段树的根节点然后就只需要开一个结构体了code:#include<bits/stdc++.h>#definelct[n......
  • 2024-02-17-物联网C语言(2-数组)
    2.数组2.1数组的概念​ 数组是若干个相同类型的变量在内存中的有序存储集合。数组存储一组数据数组里面存储的数据类型必须是相同的数字在内存中会开辟一块连续的空间//定义了一个整型的数组a,a是数组的名字,数组中有10个元素,每个元素的类型都是int类型,而且在内存中连续......
  • 【集训笔记】2024 寒假集训 第一天:最优化问题
    最优化问题二分许多最优化问题可以通过二分来转化为判定性问题。0-1分数规划0-1分数规划思想用于求解分式最优化问题。可以通过对分式二分判定,转化为某一式子大于/小于常数,然后求对应最值即可。动态规划动态规划算法的一大用处就是解决最优化问题。朴素的动态规划效率一般......