20220903--CSP-S模拟1
刚考完二调,我热爱文化课 \(\cdots\) 个大爷
那就摆烂呗,润到机房 \(\cdots\cdots\) 怎么又是考试???
问题不大,开始看题
A. 斐波那契
其实相当一眼就能得出比较显然的结论
或者随便乱写一个暴力都能达到 \(90pts\)
那就比较一眼了
这还是比较简单的
点击查看代码
#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\)
不过题解里的确写到了带修莫队
是这样评价的:
然后听说大佬们用分块爆碾?
于是我去写了正解
点击查看代码
#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;
}
本文来自博客园,作者:冬天丶的雨,转载请注明原文链接:https://www.cnblogs.com/WintersRain/p/16653330.html
为了一切不改变的理想,为了改变不理想的一切