T1 暴雨

放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理

我是直接$dp$的,可能代码的复杂度比那种的稍微小一点

设$f[i][j][p][0/1]$表示考虑了前$i$列,里面的最大值高度是$j$,

并且后面还至少存在高度为$j$的土块,在前$i$列挖平了$p$个土块,积水的体积是奇数或者偶数的方案数

采用刷表更新$dp$值的方法,更新$f[i][j][k][u]$的所有可能到达的状态

可能有人问数组怎么开,因为$k \leq 26$所以最大值的哪一维只记录前$k+1$大即可

适当的给原数组离散化。

记录几个值

$val[i][j]$表示前$i$列第$j$大的土块的高度,

$cnt[i]$表示前$i$列有几个可以转移的前$j$大值(记录可转移的状态个数)

然后考虑$dp$,用$i$更新$i+1$

考虑两种情况,

1.$val[i][j] \geq a[i+1]$

$f[i+1][J][k][0/1]+=f[i][j][k][0/1]$

$f[i+1][J][k+1][0/1]+=f[i][j][k][0/1]$

2.$val[i][j] \leq a[i+1]$

$f[i+1][a_{i+1}][k][0/1]+=f[i][j][k][0/1]$

$f[i+1][J][k+1][0/1]+=f[i][j][k][0/1]$

直接做转移即可,然后因为$dp$转移的时候有一个限制,就是保证后面至少有一个高度为$j$的土块

所以为了让转移合法,我们从前往后,从后往前分别转移一次

然后考虑对$dp$值合并合并的时候保证$g,f$数组满足转移时候的关系即可

写代码的时候注意不要往超越边界的地方转移,卡一下边界即可

 1 #include<bits/stdc++.h>
2 #define sit multiset<int>::iterator
3 using namespace std;
4 namespace AE86{
5 #define out(x) cout<<#x<<":"<<x<<endl
6 #define fuck cout<<"fuck"<<endl
7 inline int read(){
8 int x=0,f=1;char ch=getchar();
9 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
10 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
11 }inline void write(int x,char opt='\n'){
12 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
13 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
14 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
15 }using namespace AE86;
16 const int NN=25010,mod=1e9+7;
17 int n,K,h[NN],id[NN],ans;
18 struct DP{
19 int a[NN],f[NN][26][26][2],val[NN][26],cnt[NN];
20 multiset<int> S;unordered_map<int,int> mp[NN];
21 inline void calc(){
22 S.insert(0);
23 for(int i=1;i<=n;i++){
24 S.insert(a[i]); sit it=S.end();
25 for(int j=1;j<=K+1;j++){
26 if(it==S.begin()) break; --it;
27 val[i][mp[i][*it]=++cnt[i]]=*it;
28 }
29 }
30 f[0][1][0][0]=1; val[0][cnt[0]=1]=0;
31 for(int i=0;i<n;i++) for(int j=1;j<=cnt[i];j++) for(int k=0;k<=K;k++)
32 for(int u=0;u<=1;u++) if(f[i][j][k][u]){
33 if(val[i][j]>=a[i+1]){
34 int J=mp[i+1][val[i][j]],sta=u^(val[i][j]-a[i+1]&1);
35 f[i+1][J][k][sta]=(f[i+1][J][k][sta]+f[i][j][k][u])%mod;
36 sta=u^(val[i][j]&1);
37 if(k+1<=K) f[i+1][J][k+1][sta]=(f[i+1][J][k+1][sta]+f[i][j][k][u])%mod;
38 }else{
39 int J=mp[i+1][a[i+1]],sta=u^(val[i][j]&1);
40 f[i+1][J][k][u]=(f[i+1][J][k][u]+f[i][j][k][u])%mod;
41 J=mp[i+1][val[i][j]];
42 if(k+1<=K) f[i+1][J][k+1][sta]=(f[i+1][J][k+1][sta]+f[i][j][k][u])%mod;
43 }
44 }
45 }
46 }F,G;
47 namespace WSN{
48 inline short main(){
49 freopen("rain.in","r",stdin);
50 freopen("rain.out","w",stdout);
51 n=read(); K=read(); for(int i=1;i<=n;i++) h[i]=read(),F.a[i]=G.a[n-i+1]=h[i],id[i]=i;
52 F.calc(); G.calc();
53 sort(id+1,id+n+1,[](int x,int y)->bool{return h[x]>h[y];});
54 for(int i=1;i<=n;i++){
55 if(h[id[i]]<h[id[K+1]]) break;
56 int now=id[i],val=h[now];
57 for(int j=F.cnt[now-1];j;j--){
58 if(F.val[now-1][j]>val) break;
59 for(int k=G.cnt[n-now];k;k--){
60 if(G.val[n-now][k]>=val) break;
61 for(int u=0;u<=K;u++){
62 ans=(ans+1ll*F.f[now-1][j][u][0]*G.f[n-now][k][K-u][0]%mod)%mod;
63 ans=(ans+1ll*F.f[now-1][j][u][1]*G.f[n-now][k][K-u][1]%mod)%mod;
64 }
65 }
66 }
67 } write(ans%mod);
68 return 0;
69 }
70 }
71 signed main(){return WSN::main();}

T2 AVL树

不知道有没有什么简便的暴力

反正我打了$98$行才拿到了$20$分

当时就知道这一场要崩掉了,花了将近一个小时调暴力(?)

早知道去打别的题了,比如$T4$的六十分感觉貌似不难想,就是可能是调有点费劲

然后不会,就咕咕咕了

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 namespace AE86{
5 #define out(x) cout<<"x="<<x<<endl
6 #define fuck cout<<"fuck"<<endl
7 inline int read(){
8 int x=0,f=1;char ch=getchar();
9 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
10 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
11 }inline void write(int x,char opt='\n'){
12 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
13 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
14 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
15 }using namespace AE86;
16 const int NN=5e5+5;
17 int n,k,fa[NN],son[NN][2],root,dep[NN],mdp[NN];
18 bool vis[NN];
19 inline void getdep(int f,int x){
20 if(son[x][0]){
21 dep[son[x][0]]=dep[x]+1;
22 getdep(x,son[x][0]);
23 }
24 if(son[x][1]){
25 dep[son[x][1]]=dep[x]+1;
26 getdep(x,son[x][1]);
27 }
28 }
29 inline void dfs(int f,int x){
30 if(!vis[x]) return;
31 mdp[x]=dep[x];
32 if(son[x][0]){
33 dfs(x,son[x][0]);
34 mdp[x]=max(mdp[x],mdp[son[x][0]]);
35 }
36 if(son[x][1]){
37 dfs(x,son[x][1]);
38 mdp[x]=max(mdp[x],mdp[son[x][1]]);
39 }
40 }
41 vector<int> pre;
42 inline void bian(int x){
43 if(son[x][0]&&vis[son[x][0]]) bian(son[x][0]);
44 pre.push_back(x);
45 if(son[x][1]&&vis[son[x][1]]) bian(son[x][1]);
46 }
47 int ans[NN],sta;
48 namespace WSN{
49 inline short main(){
50 freopen("avl.in","r",stdin);
51 freopen("avl.out","w",stdout);
52 n=read(); k=read(); memset(ans,0x3f,sizeof(ans));
53 for(int i=1,x;i<=n;i++){
54 x=read(); fa[i]=x; son[x][i>x]=i;
55 if(x==-1) root=i;
56 }
57 if(k==1){
58 for(int i=1;i<=n;i++) printf(fa[i]!=-1?"0":"1");
59 return puts(""),0;
60 }
61 getdep(-1,root);
62 for(int i=1;i<(1<<n);++i) if((i&(1<<root-1))&&__builtin_popcount(i)==k){
63 for(int i=1;i<=n;++i) mdp[i]=0;
64 for(int j=1;j<=n;++j) if(i&(1<<j-1)) vis[j]=1;
65 dfs(-1,root); bool flag=0;
66 for(int j=1;j<=n;++j){
67 if(vis[j]&&(vis[son[j][0]]||vis[son[j][1]])){
68 int a=mdp[son[j][0]]-dep[son[j][0]];
69 int b=mdp[son[j][1]]-dep[son[j][1]];
70 if(!vis[son[j][0]]) a=-1;
71 if(!vis[son[j][1]]) b=-1;
72 if(abs(a-b)>1){flag=1;break;}
73 }
74 }
75 if(!flag){
76 pre.clear(); bian(root);
77 if(pre.size()==k){
78 for(int j=0;j<pre.size();++j){
79 if(ans[j+1]>pre[j]){
80 for(int j=0;j<pre.size();++j) ans[j+1]=pre[j];
81 sta=i; break;
82 }
83 if(ans[j+1]<pre[j]) break;
84 }
85 }
86 }
87 for(int j=1;j<=n;++j) if(i&(1<<j-1)) vis[j]=0;
88 }
89 for(int i=1;i<(1<<n);++i) if(sta==i){
90 for(int j=1;j<=n;++j)
91 if(i&(1<<j-1)) printf("1");
92 else printf("0"); puts("");
93 break;
94 }
95 return 0;
96 }
97 }
98 signed main(){return WSN::main();}

暴力辛酸泪

$UPD 2021.10.8$打过了正解,比较神仙的贪心

发现选择一个节点,他的所有祖先都必须要选,所以保证中序遍历最优也就等价于保证前序遍历最优

然后考虑先使用一个$dp$计算出深度为$x$的$avl$树至少有几个节点 $dp[x]=dp[x-1]+dp[x-2]+1$

证明考虑把两个子树拼起来加上一个根节点就行。

预处理完之后考虑如何谈心

记录几个数组

$mdp[x]$表示以$x$为根的子树里面最深的节点的深度

$h[x]$表示构造出来的合法的$avl$树里面的$x$的深度

$mh[x]$表示以$x$为根的子树深度至少为多少才合法,就是一个下界。

那么在按照$dfs$序遍历树的时候模拟选择一个节点的过程然后看选完这个节点后是否合法$\leq k$,

合法的话就真正的给答案加上这个点以及其祖先

 1 #include<bits/stdc++.h>
2 using namespace std;
3 namespace AE86{
4 inline int read(){
5 int x=0,f=1;char ch=getchar();
6 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
7 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
8 }inline void write(int x,char opt='\n'){
9 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
10 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
11 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
12 }using namespace AE86;
13 const int NN=5e5+5;
14 int n,k,root,fa[NN],son[NN][2],cnt[41],dep[NN],mdp[NN],h[NN],mh[NN];
15 bool ans[NN];
16 inline void getdep(int f,int x){
17 dep[x]=dep[f]+1; mdp[x]=dep[x];
18 if(son[x][0])
19 getdep(x,son[x][0]),mdp[x]=max(mdp[x],mdp[son[x][0]]);
20 if(son[x][1])
21 getdep(x,son[x][1]),mdp[x]=max(mdp[x],mdp[son[x][1]]);
22 }
23 inline int calc(int x,int num=0){
24 int y=max(h[x],dep[x]);
25 while(x){
26 if(!ans[x]) ++num;
27 y=max(y,h[x]);
28 if(x<fa[x]&&!ans[son[fa[x]][1]])
29 num+=cnt[max(y-1,mh[son[fa[x]][1]])-dep[fa[x]]];
30 x=fa[x];
31 }
32 return num;
33 }
34 inline void add(int x){
35 h[x]=max(h[x],dep[x]);
36 int y=h[x];
37 while(x){
38 if(!ans[x]) ans[x]=1,--k;
39 h[x]=max(h[x],y);
40 if(x<fa[x]&&!ans[son[fa[x]][1]]&&son[fa[x]][1])
41 mh[son[fa[x]][1]]=max(mh[son[fa[x]][1]],h[x]-1);
42 x=fa[x];
43 }
44 }
45 inline void slove(int x){
46 // int num=calc(x);
47 // printf("x=%d num=%d k=%d ans=",x,num,k);
48 // for(int i=1;i<=n;i++) cout<<ans[i];cout<<endl;
49 if(calc(x)<=k) add(x);
50 if(son[x][1]&&son[x][0]){
51 if(mdp[son[x][0]]<mh[x]){
52 mh[son[x][0]]=max(mh[x]-1,mh[son[x][0]]);
53 mh[son[x][1]]=max(mh[x],mh[son[x][1]]);
54 }else{
55 mh[son[x][0]]=max(mh[x],mh[son[x][0]]);
56 mh[son[x][1]]=max(mh[x]-1,mh[son[x][1]]);
57 }
58 slove(son[x][0]); slove(son[x][1]);
59 }
60 else{
61 if(son[x][0]){
62 mh[son[x][0]]=max(mh[son[x][0]],mh[x]);
63 slove(son[x][0]);
64 }
65 if(son[x][1]){
66 mh[son[x][1]]=max(mh[son[x][1]],mh[x]);
67 slove(son[x][1]);
68 }
69 }
70 }
71 namespace WSN{
72 inline short main(){
73 // freopen("in.in","r",stdin); freopen("bao.out","w",stdout);
74 freopen("avl.in","r",stdin); freopen("avl.out","w",stdout);
75 n=read(); k=read();
76 cnt[1]=1; cnt[2]=2; for(int i=3;i<=40;i++) cnt[i]=cnt[i-1]+cnt[i-2]+1;
77 for(int i=1,x;i<=n;i++) x=read(),(x==-1)?(fa[i]=0,root=i):(fa[i]=x),son[fa[i]][fa[i]<i]=i;
78 getdep(0,root); slove(root); for(int i=1;i<=n;i++) printf("%d",ans[i]); puts("");
79 return 0;
80 }
81 }
82 signed main(){return WSN::main();}

T3 挖掘机

文件名叫$blueshit$就非常妙

自己的$OJ$评测姬比较快,有的拿分块写的

但是正解好像是倍增

看得到行数比较小,而且每一行不联系,所以直接一行一行搞

然后发现找到一个在$[l,r]$区间内的$X$就可以消掉连续的$k$个,这样一定最优

那么我们以$k$为一段,倍增去跳这个段数,然后你选择从$r$忘前跳和从$l$往后跳都可以,就是往后跳的时候边界的处理比较麻烦,建议往前跳

 1 #include<bits/stdc++.h>
2 using namespace std;
3 namespace AE86{
4 #define out(x) cout<<"x="<<x<<endl
5 #define fuck cout<<"fuck"<<endl
6 inline int read(){
7 int x=0,f=1;char ch=getchar();
8 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
9 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
10 }inline void write(int x,char opt='\n'){
11 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
12 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
13 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
14 }using namespace AE86;
15 const int NN=1e5+5;
16 int h,w,k,q,d,l,r,a[13][NN],sum[13][NN],b[13][NN],ans;
17 int bz[13][NN][18];
18 char ch[NN];
19 namespace WSN{
20 inline short main(){
21 freopen("blueshit.in","r",stdin);
22 freopen("blueshit.out","w",stdout);
23 h=read();w=read();k=read();q=read();
24 for(int i=1;i<=h;++i){ scanf("%s",ch+1); bz[i][w+1][0]=w+1;
25 for(int j=w;j;--j) bz[i][j][0]=ch[j]=='X'?j:bz[i][j+1][0];
26 }
27 for(int i=1;i<=h;++i) for(int j=w+1;j;--j) for(int u=1;u<=17;++u)
28 bz[i][j][u]=bz[i][min(bz[i][j][u-1]+k,w+1)][u-1];
29 while(q--){
30 d=read();l=read();r=read();ans=0;
31 for(int i=1;i<=d;++i){ int pos=l;
32 for(int j=17;~j;--j) if(bz[i][pos][j]<=r)
33 ans+=1<<j,pos=min(bz[i][pos][j]+k,w+1);
34 }
35 write(ans);
36 }
37 return 0;
38 }
39 }
40 signed main(){return WSN::main();}

向后跳

 1 #include<bits/stdc++.h>
2 using namespace std;
3 namespace AE86{
4 #define out(x) cout<<"x="<<x<<endl
5 #define fuck cout<<"fuck"<<endl
6 inline int read(){
7 int x=0,f=1;char ch=getchar();
8 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
9 while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
10 }inline void write(int x,char opt='\n'){
11 char ch[20];int len=0;if(x<0)x=~x+1,putchar('-');
12 do{ch[len++]=x%10+(1<<5)+(1<<4);x/=10;}while(x);
13 for(int i=len-1;i>=0;--i)putchar(ch[i]);putchar(opt);}
14 }using namespace AE86;
15 const int NN=1e5+5;
16 int h,w,k,q,d,l,r,a[13][NN],sum[13][NN],b[13][NN],ans;
17 int bz[13][NN][18];
18 char ch[NN];
19 namespace WSN{
20 inline short main(){
21 freopen("blueshit.in","r",stdin);
22 freopen("blueshit.out","w",stdout);
23 h=read();w=read();k=read();q=read();
24 for(int i=1;i<=h;++i){ scanf("%s",ch+1);
25 for(int j=1;j<=w;++j) bz[i][j][0]=ch[j]=='X'?j:bz[i][j-1][0];
26 }
27 for(int i=1;i<=h;i++) for(int j=1;j<=w;j++) for(int u=1;u<=17;u++)
28 bz[i][j][u]=bz[i][max(bz[i][j][u-1]-k,0)][u-1];
29 while(q--){
30 d=read();l=read();r=read();ans=0;
31 for(int i=1;i<=d;i++){ int pos=r;
32 for(int j=17;~j;j--) if(bz[i][pos][j]>=l)
33 ans+=1<<j,pos=max(bz[i][pos][j]-k,0);
34 } write(ans);
35 }
36 return 0;
37 }
38 }
39 signed main(){return WSN::main();}

向前跳

T4 游戏

$n^2$的暴力考后打了出来

枚举两个字符串的初始匹配点,然后二分找到最长的匹配长度,更新平局的树状数组,然后从最长匹配点后面比较字典序

然后更新两者谁胜谁负的树状数组,最后直接查询即可

 1 #include<stdio.h>
2 #include<cstring>
3 #define int long long
4 typedef unsigned long long ULL;
5 const ULL base=131;
6 const int NN=8010;
7 int n,m,k;
8 char A[NN],B[NN];
9 ULL a[NN],b[NN],pw[NN];
10 struct BIT{
11 int tr[NN];
12 inline void update(int x,int v){
13 ++x;while(x<NN) tr[x]+=v,x+=(x&(-x));
14 }
15 inline int query(int x,int ans=0){
16 ++x;while(x) ans+=tr[x],x-=(x&(-x));
17 return ans;
18 }
19 }c1,c2,c3;
20
21 inline int _min_(int a,int b){return a<b?a:b;}
22 inline ULL get(int l,int r,ULL *a){
23 return a[r]-a[l-1]*pw[r-l+1];
24 }
25 inline int gcd(int a,int b){
26 return b?gcd(b,a%b):a;
27 }
28 inline bool check(int p1,int p2,int len){
29 if(p1+len-1>n||p2+len-1>m) return 0;
30 return get(p1,p1+len-1,a)==get(p2,p2+len-1,b);
31 }
32 int st1,st2,ed,l,r,ans,mid;
33 namespace WSN{
34 inline short main(){
35 freopen("game.in","r",stdin);
36 freopen("game.out","w",stdout);
37 pw[0]=1; for(int i=1;i<NN;++i) pw[i]=pw[i-1]*base;
38 scanf("%s",A+1); scanf("%s",B+1);
39 n=strlen(A+1); m=strlen(B+1); k=_min_(n,m);
40 for(int i=1;i<=n;++i) a[i]=a[i-1]*base+(ULL)(A[i]-'a'+1);
41 for(int i=1;i<=m;++i) b[i]=b[i-1]*base+(ULL)(B[i]-'a'+1);
42 for(int i=1;i<=n;++i){
43 for(int j=1;j<=m;++j){
44 ans=0; ed=_min_(n-i+1,m-j+1);
45 if(A[i]==B[j]){
46 l=0,r=ed;
47 while(l<=r){
48 mid=l+r>>1;
49 if(check(i,j,mid)) l=mid+1,ans=mid;
50 else r=mid-1;
51 }c2.update(1,1); c2.update(ans+1,-1);
52 }st1=i+ans,st2=j+ans;
53 if(A[st1]<B[st2]) c1.update(ans+1,1),c1.update(ed+1,-1);
54 else c3.update(ans+1,1),c3.update(ed+1,-1);
55 }
56 }
57 for(int a1,a2,a3,GCD,tot,b1,b2,b3,C1,C2,C3,i=1;i<=k;++i){
58 a1=c1.query(i),a2=c2.query(i),a3=c3.query(i);
59 GCD=gcd(a1,gcd(a2,a3)),tot=a1/GCD+a2/GCD+a3/GCD;
60 b1=a1/GCD,b2=a2/GCD,b3=a3/GCD;
61 C1=gcd(b1,tot),C2=gcd(b2,tot),C3=gcd(b3,tot);
62 printf("%lld/%lld %lld/%lld %lld/%lld\n",b1/C1,tot/C1,b2/C2,tot/C2,b3/C3,tot/C3);
63 }
64 return 0;
65 }
66 }
67 signed main(){return WSN::main();}

RE 60

Noip模拟70 2021.10.6的更多相关文章

  1. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  2. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  3. Noip模拟81 2021.10.20

    T1 语言 比较简单的题,然后就瞎写了,所以考场上就我一个写了线段树的,所以我的常数.... 所以就枚举动词的位置,找前面后面有没有出现$4$即可 1 #include<bits/stdc++. ...

  4. Noip模拟83 2021.10.26

    T1 树上的数 有手就能在衡中$OJ$上过,但是$WaitingCoders$不行,就是这样 必须使用$O(n)$算法加上大力卡常,思路就是找子树内没更新的更新,更新过了直接$return$ 1 #i ...

  5. Noip模拟80 2021.10.18

    预计得分:5 实际得分:140?????????????? T1 邻面合并 我考场上没切掉的大水题....(证明我旁边的cty切掉了,并觉得很水) 然而贪心拿了六十,离谱,成功做到上一篇博客说的有勇气 ...

  6. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...

  7. Noip模拟78 2021.10.16

    这次时间分配还是非常合理的,但可惜的是$T4$没开$\textit{long long}$挂了$20$ 但是$Arbiter$上赏了蒟蒻$20$分,就非常不错~~~ T1 F 直接拿暴力水就可以过,数 ...

  8. Noip模拟77 2021.10.15

    T1 最大或 $T1$因为没有开$1ll$右移给炸掉了,调了一年不知道为啥,最后实在不懂了 换成$pow$就过掉了,但是考场上这题耽误了太多时间,后面的题也就没办法好好打了.... 以后一定要注意右移 ...

  9. Noip模拟75 2021.10.12

    T1 如何优雅的送分 他说是送分题,我就刚,没刚出来,想到莫比乌斯容斥后就都没推出来 好吧还是不能被恶心的题目,挑衅的语言打乱做题节奏 于是这一场也就没了.... $F(i)$表示$i$的不同质因子集 ...

随机推荐

  1. FlinkCDC 2.0使用实践体验

    一.背景说明 所谓CDC:全称是 Change Data Capture ,在广义的概念上,只要能捕获数据变更的技术,我们都可以称为 CDC .通常我们说的 CDC 技术主要面向数据库的变更,是一种用 ...

  2. 加载映射文件几种方式和mapper接口注解执行sql语句

    一.加载映射文件几种方式 二.mapper接口注解执行sql语句 就将xml中的sql语句放到注解的括号中就可以,一般只用于简单的sql语句合适:

  3. SpringMVC-初见

    目录 什么是SpringMVC? DispatcherServlet 第一个MVC程序 配置版 Maven可能存在资源过滤的问题 注解版 RestFul和控制器 实现Controller接口 使用注解 ...

  4. Nginx总结(九)Nginx服务器高性能优化的配置--轻松实现10万并发访问量

    前面讲了如何配置Nginx虚拟主机,如何配置服务日志等很多基础的内容,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category ...

  5. 离散化模板题 I ——重复元素离散化后的数字相同

    离散化模板题 I --重复元素离散化后的数字相同 题目描述 现有数列A1, A2, ⋯, An,数列中可能有重复元素. 现在要求输出该数列的离散化数列,重复元素离散化后的数字相同.  输入 第一行,一 ...

  6. php发送邮件方法-亲测可用,email.class.php过期解决办法

    php虽然提供了mail()函数,但并不好用,而PHPMailer是一个不错的邮件发送工具,使用起来也是非常简单!使用PHPMailer发送邮件: <?php header("cont ...

  7. 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php

    问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...

  8. Django边学边记—模板

    功能 产生html,且不仅仅是一个html 包含: 静态内容:html,css,js 动态内容:模板语言 使用 一般使用 Django中提供的简写函数render调用模板 render(request ...

  9. JDK1.8源码(四)——java.util.Arrays类

    一.概述 1.介绍 Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用. 二.类源码 1.asList()方法 将一个泛型数 ...

  10. Java安全之ClassLoader

    Java安全之ClassLoader 类加载机制 Java中的源码.java后缀文件会在运行前被编译成.class后缀文件,文件内的字节码的本质就是一个字节数组 ,它有特定的复杂的内部格式,Java类 ...