首页 > 其他分享 ># 2024初三年前集训测试3

# 2024初三年前集训测试3

时间:2024-02-06 11:45:14浏览次数:26  
标签:int void dfs llt 2024 inline 初三 集训 dp

2024初三年前集训测试3

其实题还行。

  1. 夕景昨日(T1):

    只要有不重合两段和相等,就可以分别取反

    考虑最多构造 20 个,使其(按 \(2^0,2^1...2^n\) 构造最优)。

    所以小于 20 暴力,大于 20 YES 即可

    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;
    int n,a[N],c[N],ans;
    mt19937 rnd(time(0));
    map<int,bool> ck;
    inline bool check(){
        int sum=0;
        For(i,1,n,1) if(c[i]) sum+=a[i];
        if(ck[sum]==1) return 1;
        ck[sum]=1;
        return 0;
    }
    void dfs(int t){
        if(t>n){
            if(check()) ans=1;
        }else{
            c[t]=1;dfs(t+1);
            c[t]=0;dfs(t+1);
        }
    }
    
    int main(){
        scanf("%d",&n);
        For(i,1,n,1) scanf("%d",a+i);
        if(n<=20){
            dfs(1);
            puts((ans)?"Yes":"No");
        }else puts("Yes");
    }
    
  2. 透明答案(T2):

    打表找规律,在 \(n\equiv 1 \pmod 3\) 时 \(BOB\),否则 \(Ayano\)

    CODE
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1003;
    int dp[N][N][3],n;
    bool dfs(int x,int y,int t){
        if(dp[x][y][t]!=-1) return dp[x][y][t]; 
        dp[x][y][t]=0;
        if (t==2){
            if(x>0) dp[x][y][t]=(!dfs(x-1,y+1,0)||dp[x][y][t]);
            dp[x][y][t]=(!dfs(x+1,y,0)||!dfs(x,y,0));
        }else{
            if(y>0) dp[x][y][t]=(!dfs(x,y-1,t+1)||!dfs(x+1,y-1,t+1)||dp[x][y][t]);
            if(x>0) dp[x][y][t]=(!dfs(x-1,y,t+1)||dp[x][y][t]);
        }
        return dp[x][y][t];
    }
    
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in.in","r",stdin);
        freopen("out.out","w",stdout);
    #endif
        memset(dp,-1,sizeof dp),dp[0][0][0]=dp[0][0][1]=dp[0][0][2]=0;
        scanf("%d",&n);
        puts(!(dfs(0,n-1,0))?"Ayano":"Bob");
    }
    
  3. 界外科学(T3)

    数据被 D 的最惨的一集。

    不能说是水,只能说和没有一样。

    甚至直接输出 \(b_i\) 的和就可过。

    meet in middle

    用 trie 树合并即可。

    巨难调

    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=50,R=3e5+4;
    const llt INF=0x3f3f3f3f3f3f3f3f;
    int n,m,a[2][N],b[2][N],p[2],cnt[2];
    llt ans=-INF;
    bool ls[N];
    
    namespace IO{
        int READ_NONPARAMETRIC_INIT;
        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 T read(T &x=READ_NONPARAMETRIC_INIT){
            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<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;
    struct E{int ox;llt sm;}qa[2][R];
    void dfs(int id,int t){
        if(t>p[id]){
            int ox=0; llt sum=0;
            For(i,1,p[id],1) if(ls[i]==1) ox^=a[id][i],sum+=b[id][i];
            qa[id][++cnt[id]]={ox,sum};
        }else{
            ls[t]=0; dfs(id,t+1);
            ls[t]=1; dfs(id,t+1);
        }
    }
    class TRIE{
    private:
        static const int T=40;
        int t[R*N][3],tot_=1;
        llt ma[R*N];
        int f[N],cm[N];
        llt get(int rt,int i,int nw){
            if(!i) return ma[rt];
            else if(!rt||(f[i]^nw)>cm[i]) {return -INF;}
            else if((f[i]^nw)==cm[i]) return max(get(t[rt][0],i-1,0),get(t[rt][1],i-1,1));
            else return ma[rt];
        }
    public:
        TRIE(){For(i,0,N-1,1) ma[i]=-INF;}
        inline void Fj(int x,int *a){For(i,1,T,1) a[i]=x%2,x/=2;}
        inline void In_m(int x){Fj(x,cm);}
        inline void Add(int x,llt v){
            Fj(x,f+1);int rt=1;
            For_(i,T,0,1){
                ma[rt]=max(ma[rt],v);
                if(!t[rt][f[i]]) t[rt][f[i]]=++tot_;
                rt=t[rt][f[i]];
            }
        }
        inline llt Get(int x){Fj(x,f);return get(1,T,0);}
    }tr;
    int main(){
    #ifndef ONLINE_JUDGE
        freopen("in_out/in.in","r",stdin);
        freopen("in_out/out.out","w",stdout);
    #endif
        int n;read(n,m);
        p[0]=n/2,p[1]=n-p[0];
        For(i,1,p[0],1) read(a[0][i]);
        For(i,1,p[1],1) read(a[1][i]);
        For(i,1,p[0],1) read(b[0][i]);
        For(i,1,p[1],1) read(b[1][i]);
        dfs(0,1),dfs(1,1); tr.In_m(m);
        For(i,1,cnt[0],1) tr.Add(qa[0][i].ox,qa[0][i].sm);
        int a;
        For(i,1,cnt[1],1) ans=max(ans,qa[1][i].sm+(a=tr.Get(qa[1][i].ox)));
        write(ans);
    }
    
  4. 回忆补时(T4)

    100 pts 李超线段树,不会没改。

    60 pts 直接枚举两遍最大(最小)贪心即可。

    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;
    const llt INF=0x3f3f3f3f3f3f3f3f;
    int n,q;
    llt ma[N],mi[N];
    struct FAC{
        llt k,b;
        inline void Rd(){scanf("%lld%lld",&k,&b);}
        inline llt T(llt x){return 1ll*x*k+b;}
    }c[N];
    
    int main(){
        scanf("%d",&n);
        For(i,1,n,1) c[i].Rd();
        scanf("%d",&q);
        For(i,1,q,1){
            llt x;scanf("%lld",&x);
            llt lma=-INF,lmi=INF,ans=-INF,pos;
    
            For(i,1,n,1) if(c[i].T(x)>lma) lma=c[i].T(x),pos=i;
            For(i,1,n,1) if(pos!=i) ma[i]=lma;
            ma[pos]=-INF;
            For(i,1,n,1) if(i!=pos&&c[i].T(x)>ma[pos]) ma[pos]=c[i].T(x);
    
            For(i,1,n,1) if(c[i].T(x)<lmi) lmi=c[i].T(x),pos=i;
            For(i,1,n,1) if(pos!=i) mi[i]=lmi;
            mi[pos]=INF;
            For(i,1,n,1) if(i!=pos&&c[i].T(x)<mi[pos]) mi[pos]=c[i].T(x);
    
            For(i,1,n,1) ans=max({ans,c[i].T(ma[i]),c[i].T(mi[i])});
            printf("%lld\n",ans);
        }
    }
    

我怎么越写越短

标签:int,void,dfs,llt,2024,inline,初三,集训,dp
From: https://www.cnblogs.com/xrlong/p/18009466

相关文章

  • 2024牛客寒假算法基础集训营1
    2024牛客寒假算法基础集训营1A.DFS搜索思路:看dfs其实就是一道字符题目#include<bits/stdc++.h>usingnamespacestd;stringx="dfs";stringy="DFS";voidsolve(){intn;cin>>n;stringst;cin>>st;intxx=0,yy=......
  • 2024年1月文章一览
    2024年1月编程人总共更新了6篇文章:1.2023年12月文章一览2.ProgrammingAbstractionsinC阅读笔记:p242-p2453.ProgrammingAbstractionsinC阅读笔记:p246-p2474.ProgrammingAbstractionsinC阅读笔记:p248-p2535.ProgrammingAbstractionsinC阅读笔记:p254-p2576.ProgrammingAb......
  • 2024年1月文章一览
    2024年1月编程人总共更新了6篇文章:1.2023年12月文章一览2.ProgrammingAbstractionsinC阅读笔记:p242-p2453.ProgrammingAbstractionsinC阅读笔记:p246-p2474.ProgrammingAbstractionsinC阅读笔记:p248-p2535.ProgrammingAbstractionsinC阅读笔记:p254-p2576.Program......
  • 2024 NOIWC 游记
    复盘前天晚上去试机,调了一下Geany的配置。这玩意确实好用,很合我胃口。进赛场,发现给了吃的和牛奶,非常良心啊。PKUWC甚至没有清试机留下来的东西,WC清掉了,比较可惜。先看题。看T1,不会。看T2,感觉比较可做。看T3,这是啥玩意??于是开始想T2。发现了一些性质,注意到一个区间在\(L......
  • 复杂系统 | 20240116 · 考试题目回忆版
    相关链接:RL基础|ValueIteration的收敛性证明RL基础|PolicyIteration的收敛性证明复杂系统|考前知识点总结(不完全)“嵌套分区法,是一种良策;将海洋分成块,每块都探测。”概述:基于事件的优化方法/事件驱动优化/Event-BasedOptimization/EBO十个判断题,感觉......
  • 对话苏光牛:国内数据库市场已进入关键转折点,2024年或是分水岭
    “中国数据库市场已进入关键阶段,2024年或是分水岭!”“目前,国内数据库产品数量接近300款,我们真的需要这么多数据库吗?”面对这个问题,华为云数据库业务CTO苏光牛不假思索地给出了他的见解:“不仅是中国市场,全球范围内,也不需要如此多的商业数据库。”他进一步预测,随着市场的自然淘汰......
  • 2024年2月5号总结
    P1194买礼物洛谷题目链接解题思路这个题目是一个最小生成树或者说是贪心的题目,在这里我们把买的东西定义成顶点,边是优惠的价格那么我们只要把每一个顶点连接起来可以了,但要注意优惠的价格​ 可能大于A,因此我们要比较A的价格和优惠的价格谁的花费少接下来就是最小生成树的......
  • WC2024 水镜
    洛谷传送门WC2024被打爆了,呜呜。我赛时会这题\(8\)分指数级暴力,哈哈。真不知道自己在干嘛。下文令\(T=2L\)。考虑如何判定一个序列\(a\)是否合法。考虑先枚举一个\(T\)。因为要求\(r_i<r_{i+1}\),考虑讨论相邻两项的取值:若\(a_i<a_{i+1}\)则\(r_i=a_i,......
  • WC2024 游记
    2月1日测试开场读三道题,题好长!T1看起来是数数,T2是神秘构造,T3还是数数。开赛后15分钟开始想T1。直接做好像不太可做啊,然后立刻想到了拆贡献看看。发现拆贡献后问题变成了背包问题,可以\(\mathcalO(nT)\)解决。看完数据范围有点惊讶,我的做法能拿满分!在去年,金牌分数线不......
  • 洛谷 P10145 [WC/CTS2024] 线段树 题解--zhengjun
    提供一种考场做法,在思路上和官方题解的差异蛮大的,虽然结果差不多。首先需要发现\([l,r)\)区间可以算出来的充要条件是:如果对于每个选中的节点\(u\),连无向边\((L_u,R_u)\),则当且仅当\(l\)和\(r\)连通时区间\([l,r)\)可以算出来。证明的话,用前缀和理解这些东西,分别考虑......