ZR 集训 Day24 – 模拟赛

ooliver 发布于 18 小时前 83 次阅读 OI


AI 摘要

模拟赛炸裂开局:T4暴力诡异爆零,T5伪代码没调完却意外吃分,T6直接放弃……最后破罐破摔“数学瞎搞一通”?世界线交汇,三道题全是乱搞代码,结局究竟是真香还是真痛?

前言

T4 暴力居然爆 $0$ 了,非常诡异,本来感觉拿个 $n^2\log n$ 的糖糖分数还是可以的。

T5 依旧想了个非常伪的做法,甚至还没调出来,好在虽然伪但是拿到了多重背包的部分分。

T6 没时间看了。

可是啊

数学瞎搞一通。

C++
#include<bits/stdc++.h>
using namespace std;

#define int long long
int c,T,a,b;

signed main(){
    cin>>c>>T;
    while(T--){
        cin>>a>>b;
        int awa=sqrt(a);
        int klz=(sqrt(1+4*b)-1)/2;
        if(awa<=klz) cout<<"AKTang!\n";
        else cout<<"AWaDa!\n";
    }
    return 0;
}

世界线交汇

依旧瞎搞。

C++
#include<bits/stdc++.h>
using namespace std;

const int mod=1e9+7;
int c,T,n,a,x;

signed main(){
    cin>>c>>T;
    while(T--){ 
        cin>>n>>a>>x;
        int ans=(n*x)%mod;
        int num[2]={0,0},now=n;
        num[n%2]++;
        while(now>0){
            if(now>1) ans=(ans+num[now%2]*(now/a))%mod;
            ans=(ans+num[(now+1)%2]*((now+1)/a))%mod;
            int n0=num[0],n1=num[1];
            num[(now/2)%2]=(2*n0+n1)%mod;
            num[(now/2+1)%2]=n1%mod;
            now/=2;
        }
        cout<<ans<<"\n";
    }
    return 0;
}

终究是一场梦

还是瞎搞。

C++
#include<bits/stdc++.h>
using namespace std;

const int N=2e6+5;
int c,T,n,k;
int a[N],p[N],tag[N],sum[N];

struct BIT{
    int tr[N];
    vector<pair<int,int>> v;
    void add(int x,int k){
        for(;x<=n;x+=x&-x){
            tr[x]+=k;
            v.push_back({x,k});
        }
    }
    int query(int x){
        int res=0;
        for(;x;x-=x&-x) res+=tr[x];
        return res;
    }
    void clear(){
        for(int i=0;i<v.size();i++) tr[v[i].first]-=v[i].second;
        v.clear();
    }
}bit;

signed main(){
    scanf("%d%d",&c,&T);
    while(T--){
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++) scanf("%d",a+i),p[a[i]]=i,tag[i]=0;
        int idx=1;
        while(k>0&&idx<=n){
            int id=p[idx]+bit.query(p[idx]);
            if(idx==id) tag[idx]=1,printf("%d ",idx++);
            else if(k>0){
                tag[idx]=1,printf("%d ",idx);
                k--,bit.add(1,1),bit.add(p[idx],-1),idx++;
            }
        }
        for(int i=1;i<=n;i++) if(!tag[a[i]]) printf("%d ",a[i]);
        printf("\n");
        bit.clear();
    }
    return 0;
}