csp s模擬測試61磚塊, 數字,甜圈題解

2022-04-14 06:11:19 字數 3020 閱讀 9633

題面:

磚塊:直接模擬即可,map統計被覆蓋的次數

#include#include#include#include#includeusing namespace std;

const int maxn=1005;

int n,k,len,a,b,x,y,ans=0;//a,b:xia,x,y:shang

char opt[maxn];

map< pair,int>m;

void workn(int &a,int &b,int &x,int &y)else ++b,++y;

for(int i=a;i<=x;++i) }}

void works(int &a,int &b,int &x,int &y)else --b,--y;

for(int i=a;i<=x;++i) }}

void workw(int &a,int &b,int &x,int &y)else--a,--x;

for(int i=a;i<=x;++i) }}

void worke(int &a,int &b,int &x,int &y)else ++x,++a;

for(int i=a;i<=x;++i) }}

int main()

if(a==x)else

} return 0;

}

數字:顯然不會

粘個50分**:

1 #include2 #include3 #include4 #include5

#define int long long

6using

namespace

std;

7int n,k,t,fac[10000010];8

signed main()

15 scanf("

%lld

",&t);

16while(t--)

23return0;

24 }

view code

甜圈:但是會有順序的影響,1+3+2也會被我們算為合法

為了排除順序的影響,我們給它乙個hash,每次區間加我們先讓它乘上base,然後再加

這樣就是乙個支援區間加,區間乘的線段樹

#include#include#include#include#define ull unsigned long long

using namespace std;

const int base=31;

const int maxn=200005;

int n,k,t;

ull tot;

struct node

}tr[maxn<<2];

void down(int k,int l,int r)

if(tr[k].laz_add!=0)

}void update(int k,int l,int r,int opl,int opr,int val)

down(k,l,r);

int mid=(l+r)>>1;

if(opl<=mid) update(k<<1,l,mid,opl,opr,val);

if(opr>mid) update(k<<1|1,mid+1,r,opl,opr,val);

tr[k].sum=(tr[k<<1].sum+tr[k<<1|1].sum);

}int query(int k,int l,int r)

down(k,l,r);

int mid=(l+r)>>1;

return query(k<<1,l,mid)+query(k<<1|1,mid+1,r);

}signed main()

printf("%d\n",query(1,1,n));

return 0;

}

另:區間加和區間乘的線段樹板子:

#include#include#include#include#define int long long

using namespace std;

const int maxn=1e5+5;

int n,m,p,a[maxn];

struct nodetr[maxn<<2];

void build(int k,int l,int r)

int mid=(l+r)>>1;

build(k<<1,l,mid),build(k<<1|1,mid+1,r);

tr[k].sum=(tr[k<<1].sum+tr[k<<1|1].sum)%p;

}void down(int k,int l,int r)

if(tr[k].laz_add!=0)

}void update_add(int k,int l,int r,int opl,int opr,int val)

down(k,l,r);

int mid=(l+r)>>1;

if(opl<=mid) update_add(k<<1,l,mid,opl,opr,val);

if(opr>mid) update_add(k<<1|1,mid+1,r,opl,opr,val);

tr[k].sum=(tr[k<<1].sum+tr[k<<1|1].sum)%p;

}void update_mul(int k,int l,int r,int opl,int opr,int val)

down(k,l,r);

int mid=(l+r)>>1;

if(opl<=mid) update_mul(k<<1,l,mid,opl,opr,val);

if(opr>mid) update_mul(k<<1|1,mid+1,r,opl,opr,val);

tr[k].sum=(tr[k<<1].sum+tr[k<<1|1].sum)%p;

}int query(int k,int l,int r,int opl,int opr)

signed main()

else if(opt==2)

else

}return 0;

}

考試反思 1005csp s模擬測試61 休止

連續不知道多少場了,都是一場10名以內一場20以外。波動極大。還極有規律。拿到這套題,看到t1大模擬無話可說。然後考場上我覺得t2很簡單。然後就碼了兩個半小時。t3資料水了暴力70。t1 磚塊 大模擬。其實也不大。記錄上下左右前後邊界然後滾就是了 閒得慌打hash map 1 include2 in...

csp s模擬測試94

一場簡單題,打爆了。t1 腦抽分解質因數準備分子分母消,想了半天發現 jb 互質直接上天,果斷碼了高精滾蛋。t2 無腦手玩大樣例,突然靈光一閃想到對映到前 k 大小的區間,t3 寫完暴力準備划水,突然發現特殊性質可寫,10 分鐘拯救了 25 分。8003 24 46 7003 24 58 6503 ...

csp s模擬測試93

自閉場。t1 想到 cdq 因為複雜度少看見乙個 0 打了半年還用了 sort 直接廢掉,t2 t3 直接自閉暴力分都沒有。考場太慌了,心態不好。8002 07 34 003 12 11 0 03 11 53 8003 12 11 沒有前途就是垃圾趁早滾回實驗二安度晚年吧。cdq 不接受反駁。最簡單...