20220903--CSP-S模拟1

刚考完二调,我热爱文化课 \(\cdots\) 个大爷
那就摆烂呗,润到机房 \(\cdots\cdots\) 怎么又是考试???
问题不大,开始看题

A. 斐波那契

其实相当一眼就能得出比较显然的结论
或者随便乱写一个暴力都能达到 \(90pts\)
那就比较一眼了

image
image

这还是比较简单的

点击查看代码
#include<cstdio>
#include<cstring>
#include<string>
#define int long long
#define WR WinterRain
using namespace std;
const int WR=1001000;
int m;
int fib[110];
int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch>'9'||ch<'0'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        s=(s<<3)+(s<<1)+ch-'0';
        ch=getchar();
    }
    return s*w;
}
signed main(){
    m=read();
    fib[1]=fib[2]=1;
    for(int i=3;i<=100;i++){
        fib[i]=fib[i-1]+fib[i-2];
        if(fib[i]>1e12) break;
    }
    while(m--){
        int x=read(),y=read();
        int idx,idy;
        for(int i=1;i<=60;i++){
            if(fib[i]>=x){
                idx=i-1;break;
            }
        }
        for(int i=1;i<=60;i++){
            if(fib[i]>=y){
                idy=i-1;break;
            }
        }
        while(x!=y){
            if(x<y) swap(x,y),swap(idx,idy);
            x-=fib[idx];
            // printf("%lld %lld\n",x,y);
            for(int i=1;i<=60;i++){
                if(fib[i]>=x){
                    idx=i-1;break;
                }
            }
        }
        printf("%lld\n",x);
    }
    return 0;
}

然后去吃了个饭,回来看第二题

B. 数颜色

首先我写了一个带修莫队
调了调块长,改了改 \(\operatorname{sort}\)
喜提 \(65\)
不过题解里的确写到了带修莫队
是这样评价的:

image

然后听说大佬们用分块爆碾?
于是我去写了正解

image

点击查看代码


#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#define int long long
#define WR WinterRain
using namespace std;
const int WR=501000;
int n,m;
int a[WR];
vector<int>col[WR];
int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch>'9'||ch<'0'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        s=(s<<3)+(s<<1)+ch-'0';
        ch=getchar();
    }
    return s*w;
}
signed main(){
    n=read(),m=read();
    for(int i=1;i<=n;i++){
        a[i]=read();
        col[a[i]].push_back(i);
    }
    while(m--){
        int opt=read();
        if(opt==1){
            int l=read(),r=read(),val=read();
            int st=lower_bound(col[val].begin(),col[val].end(),l)-col[val].begin();
            int ed=upper_bound(col[val].begin(),col[val].end(),r)-col[val].begin();
            printf("%lld\n",ed-st);
        }else{
            int x=read();
            if(a[x]==a[x+1]) continue;
            int pos=lower_bound(col[a[x]].begin(),col[a[x]].end(),x)-col[a[x]].begin();
            col[a[x]][pos]=x+1;
            pos=lower_bound(col[a[x+1]].begin(),col[a[x+1]].end(),x+1)-col[a[x+1]].begin();
            col[a[x+1]][pos]=x;
            swap(a[x],a[x+1]);
        }
    }
    return 0;
}

posted @ 2022-09-09 20:45  冬天丶的雨  阅读(11)  评论(0编辑  收藏  举报
Live2D