T1 签到题

结论题,找到规律就会做

规律是每个点的度数$\mod$颜色种数,如果不是$0$则贡献一个答案

 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=1e6+5;
17 int n,m,k,c,deg[NN],ans;
18 namespace WSN{
19 inline short main(){
20 // freopen("in.in","r",stdin); freopen("bao.out","w",stdout);
21 freopen("qiandao.in","r",stdin);
22 freopen("qiandao.out","w",stdout);
23 n=read(); m=read(); k=read(); c=read();
24 if(c==1) return puts("0"),0;
25 for(int i=1;i<=k;i++){
26 int u=read(),v=read()+n;
27 ++deg[u]; ++deg[v];
28 }
29 for(int i=1;i<=n+m;i++){
30 if(deg[i]%c!=0){
31 ++ans;
32 }
33 } write(ans);
34 return 0;
35 }
36 }
37 signed main(){return WSN::main();}

T2 M弟娃

树剖+线段树,每次判断两个点的$lca$是否为其中一个点,如果不是就将两个点的子树内加一

否则找到$lca$到另一个点的链上的那个儿子,分别操作:全局加一,儿子的子树减一,另一个点的子树加一

  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=3e5+1;
16 int n,m;
17 struct SNOW{int to,next;}e[NN<<1]; int head[NN],rp;
18 inline void add(int x,int y){e[++rp]=(SNOW){y,head[x]};head[x]=rp;}
19 struct SNOWtree{
20 #define lid (id<<1)
21 #define rid (id<<1|1)
22 #define mid ((l+r)>>1)
23 int mx[NN<<2],laz[NN<<2];
24 inline void pushdown(int id){
25 laz[lid]+=laz[id];laz[rid]+=laz[id];
26 mx[lid]+=laz[id];mx[rid]+=laz[id];
27 laz[id]=0;
28 }
29 inline void update(int id,int l,int r,int ql,int qr,int v){
30 if(ql<=l&&r<=qr) return mx[id]+=v,laz[id]+=v,void();
31 if(l!=r&&laz[id]!=0) pushdown(id);
32 if(ql<=mid) update(lid,l,mid,ql,qr,v);
33 if(qr>mid) update(rid,mid+1,r,ql,qr,v);
34 if(l!=r) mx[id]=max(mx[lid],mx[rid]);
35 }
36 #undef mid
37 }tr;
38 namespace tree_division{
39 int dfn[NN],rk[NN],son[NN],top[NN],fa[NN],dep[NN],siz[NN],cnt;
40 inline void dfs1(int f,int x){
41 dep[x]=dep[f]+1; fa[x]=f; siz[x]=1;
42 for(int i=head[x];i;i=e[i].next){
43 int y=e[i].to; if(y==f) continue;
44 dfs1(x,y); siz[x]+=siz[y];
45 if(siz[son[x]]<siz[y]) son[x]=y;
46 }
47 }
48 inline void dfs2(int x,int t){
49 top[x]=t; dfn[x]=++cnt; rk[cnt]=x;
50 if(son[x]) dfs2(son[x],t);
51 for(int i=head[x];i;i=e[i].next){
52 int y=e[i].to;
53 if(y!=fa[x] && y!=son[x]) dfs2(y,y);
54 }
55 }
56 inline int LCA(int x,int y){
57 while(top[x]!=top[y]){
58 if(dep[top[x]]<dep[top[y]]) swap(x,y);
59 x=fa[top[x]];
60 }if(dfn[x]>dfn[y]) swap(x,y);
61 return x;
62 }
63 inline int find(int x,int y){
64 while(top[y]!=top[x]){
65 if(fa[top[y]]==x) return top[y];
66 y=fa[top[y]];
67 } return son[x];
68 }
69 }using namespace tree_division;
70
71 namespace WSN{
72 inline short main(){
73 freopen("magic.in","r",stdin);
74 freopen("magic.out","w",stdout);
75 n=read(); m=read();
76 if(n==1){
77 for(int i=1;i<=m;i++) printf("%lld\n",i);
78 return 0;
79 }
80 for(int i=1,u,v;i<n;i++)
81 u=read(),v=read(),add(u,v),add(v,u);
82 dfs1(0,1); dfs2(1,1); int x,y,lca;
83 while(m--){
84 x=read(),y=read();
85 if(x==y){
86 tr.update(1,1,n,1,n,1);write(tr.mx[1]);
87 continue;
88 }
89 lca=LCA(x,y);
90 if(lca!=x&&lca!=y){
91 tr.update(1,1,n,dfn[x],dfn[x]+siz[x]-1,1);
92 tr.update(1,1,n,dfn[y],dfn[y]+siz[y]-1,1);
93 write(tr.mx[1]);
94 continue;
95 }
96 if(lca==x||lca==y){
97 if(dfn[x]>dfn[y]) swap(x,y);
98 tr.update(1,1,n,1,n,1);
99 int sn=find(x,y);
100 tr.update(1,1,n,dfn[sn],dfn[sn]+siz[sn]-1,-1);
101 tr.update(1,1,n,dfn[y],dfn[y]+siz[y]-1,1);
102 write(tr.mx[1]);
103 }
104 }
105 return 0;
106 }
107 }
108 signed main(){return WSN::main();}

T3 变异大老鼠

这题比较容易打挂,而且是要么$100$要么$0$的那种

建树很容易看出,跑个最短路就行

反正我是被$dp$卡死了,调了$n$年没调出来,这一方面还是太弱

最后打的爆搜也是没调出来

设$f[u][k]$表示以$u$为根的子树中用了$k$个警察来抓住杨吞天的最大概率

那么背包合并的时候$f[x][j]=\max (f[x][l]+f[y][j-l] \times (\frac {1}{deg[x]}))$

累加贡献的时候$f[x][j]=\max (f[x][j-l]*(1-p[x][l])+p[x][l])$

关于枚举的时候需要倒序枚举,状态的更新不能用已知更新未知,会造成冲突

需要恶补树形$dp$和书上背包,记下了

 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 MM=3e4+5,NN=305;
16 int n,m,k,deg[NN];
17 struct SNOW{int to,val,next;}e[MM<<1];int head[NN],rp;
18 inline void add(int x,int y,int z){
19 e[++rp]=(SNOW){y,z,head[x]};head[x]=rp;
20 e[++rp]=(SNOW){x,z,head[y]};head[y]=rp;
21 }
22 struct node{
23 int id,data;
24 friend bool operator<(node a,node b){
25 return a.data>b.data;
26 }
27 };priority_queue<node> Q;
28 int dis[NN];bool vis[NN];
29 inline void dij(){
30 int x,y; memset(dis,0x3f,sizeof(dis));
31 dis[1]=0; Q.push((node){1,0});
32 while(!Q.empty()){
33 x=Q.top().id,y=Q.top().data; Q.pop();
34 if(!vis[x]){ vis[x]=1;
35 for(int i=head[x];i;i=e[i].next)
36 if(dis[e[i].to]>dis[x]+e[i].val)
37 Q.push((node){e[i].to,dis[e[i].to]=dis[x]+e[i].val});
38 }
39 }
40 }
41 vector<int> g[NN];
42 inline void build(int f,int x,int d){
43 if(vis[x]) return;
44 if(dis[x]!=d) return;
45 vis[x]=1; g[f].push_back(x); ++deg[f];
46 for(int i=head[x];i;i=e[i].next){
47 int y=e[i].to;build(x,y,d+e[i].val);
48 }
49 }
50 double c[NN][NN];
51 double dp[NN][NN];
52 inline void dfs(int f,int x){
53 for(int i=0;i<g[x].size();i++){
54 int y=g[x][i]; dfs(x,y);
55 for(int j=k;j;--j){
56 for(int l=1;l<=j;l++){
57 dp[x][j]=max(dp[x][j],(1.0/deg[x])*dp[y][l]+dp[x][j-l]);
58 }
59 }
60 }
61 for(int j=k;j;--j){
62 for(int l=1;l<=j;l++){
63 dp[x][j]=max(dp[x][j],c[x][l]+(1.0-c[x][l])*dp[x][j-l]);
64 }
65 }
66 }
67 namespace WSN{
68 inline short main(){
69 // freopen("in.in","r",stdin);freopen("bao.out","w",stdout);
70 freopen("arrest.in","r",stdin);
71 freopen("arrest.out","w",stdout);
72 n=read(); m=read(); k=read();
73 for(int i=1,u,v,w;i<=m;i++){
74 u=read(),v=read(),w=read();
75 add(u,v,w);
76 } dij();
77 memset(vis,0,sizeof(vis));
78 build(0,1,0);
79 for(int i=1;i<=n;i++)
80 for(int j=1;j<=k;j++)
81 scanf("%lf",&c[i][j]);
82 dfs(0,1);
83 printf("%.6lf\n",dp[1][k]);
84 return 0;
85 }
86 }
87 signed main(){return WSN::main();}

T4 朝鲜时蔬

没看到任何关于朝鲜时蔬的信息,就一道纯打表加推式子的分类讨论题

这段不知道为啥老碰见测试点分治的题,就比较没意思

题目翻译:

从$n$个数里面选择$m$个构成的中集合,

要从这些中集合里面找 能除尽中集合总和的$k$个数字的总和

以所有 可能的$k$个数字的小小集合 合在一起称为小集合,

找到小集合里面包含小小集合最多的那个个数,

最后叫你找到 小集合里面的小小集合的个数正好等于最大值 的中集合的个数

可能你更看不懂了,没事,真看不懂就看这个

没必要粘贴其实,只是为了偷税气氛,真正要理解怎么做也不是没有$pdf$,上面说的解法还是很详细的

不过比较烦的是它又有特判又有推式子,这种确实没啥大意义,给一个真正的纯推式子的题也行

 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 mod=1e9+7;
17 int n,m,k,v2,v12,v6,v4,v3;
18 inline int ksm(int a,int b,int ans=1){
19 int c=mod;for(;b;b>>=1,a=a*a%c)if(b&1)ans=ans*a%c;
20 return ans;
21 }
22 inline int pws(int n){
23 return (n%mod)*((n+1)%mod)%mod*((2*n+1)%mod)%mod*v6%mod;
24 }
25 inline int sig(int l,int r){
26 return ((l+r)%mod)*((r-l+1)%mod)%mod*v2%mod;
27 }
28 namespace WSN{
29 inline short main(){
30 freopen("vegetable.in","r",stdin);
31 freopen("vegetable.out","w",stdout);
32 n=read(); m=read(); k=read(); v2=ksm(2,mod-2),v12=ksm(12,mod-2),v6=ksm(6,mod-2),v4=ksm(4,mod-2),v3=ksm(3,mod-2);
33 if(m==1&&k==1) n%=mod,cout<<n<<endl;
34 if(m==2&&k==2) n%=mod,cout<<n*(n-1)%mod*ksm(2,mod-2)%mod<<endl;
35 if(m==3&&k==3) n%=mod,cout<<n*(n-1)%mod*(n-2)%mod*ksm(6,mod-2)%mod<<endl;
36 if(m==4&&k==4) n%=mod,cout<<n*(n-1)%mod*(n-2)%mod*(n-3)%mod*ksm(24,mod-2)%mod<<endl;
37 if(m==2&&k==1){
38 int l=1,r,ans=0;
39 while(l<=n){
40 r=min(n/(n/l),n);
41 (ans+=(n/l)%mod*(r-l+1)%mod)%=mod;
42 l=r+1;
43 } write((ans%mod-n%mod+mod)%mod);
44 }
45 if(m==3&&k==1) cout<<(n/3)%mod<<endl;
46 if(m==3&&k==2){
47 int l=1,r,ans=0;
48 while(l<=n){
49 r=min(n/(n/l),n);
50 (ans+=(n/l)%mod*(((l+r-2)%mod)*((r-l+1)%mod)%mod*v2%mod*v2%mod-(r/2-(l-1)/2)%mod*v2%mod+mod)%mod)%=mod;
51 l=r+1;
52 } write(ans);
53 }
54 if(m==4&&k==1){
55 if(n==4||n==5) cout<<1<<endl;
56 else cout<<((n/6)%mod+(n/9)%mod+(n/10)%mod+(n/12)%mod+(n/15)%mod+(n/21)%mod)%mod<<endl;
57 }
58 if(m==4&&k==2){
59 if(n==4||n==5||n==6) cout<<1<<endl;
60 else if(n==7) cout<<3<<endl;
61 else if(n==8) cout<<6<<endl;
62 else if(n==9) cout<<9<<endl;
63 else if(n==10) cout<<10<<endl;
64 else cout<<((n/11)%mod+(n/29)%mod)%mod<<endl;
65 }
66 if(m==4&&k==3){
67 if(n==4) cout<<1<<endl;
68 else if(n==5) cout<<5<<endl;
69 else{
70 int l=1,r,ans=0;
71 while(l<=n){
72 int r=min(n/(n/l),n);
73 (ans+=(n/l)%mod*(((pws(r)-pws(l-1)+mod)%mod*v12%mod-sig(l,r)*v2%mod+mod)%mod+(5*(v12%mod)%mod)%mod*((r-l+1)%mod)%mod+((r/2-(l-1)/2)%mod)*v4%mod+((r/3-(l-1)/3)%mod)%mod*v3%mod)%mod)%=mod;
74 l=r+1;
75 } write(ans);
76 }
77 }
78 return 0;
79 }
80 }
81 signed main(){return WSN::main();}

别点开

稍稍总结一下这次为啥垫底

时间的分配不够好,思考的时间占用过长,导致暴力也没打完,正解也不好打,

然后就是太不自信,感觉想出来的都不是正解,也就不敢下手,其实要是敢打的话前几场也不至于很狼狈

还能把正解给注释掉,也是没谁了,这次的$T2$也是在稿纸上划出正解思路,然后感觉不会这么简单,害怕打到一半发现假了就死掉了

也是没敢打,暴力貌似更不会,就只打了菊花的。。。

以后还是要学着在打代码的同时思考正解,不要把两者的时间分化过偏

Noip模拟71 2021.10.7的更多相关文章

  1. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  2. Noip模拟69 2021.10.5

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

  3. Noip模拟76 2021.10.14

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

  4. Noip模拟81 2021.10.20

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

  5. Noip模拟83 2021.10.26

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

  6. Noip模拟80 2021.10.18

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

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

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

  8. Noip模拟77 2021.10.15

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

  9. Noip模拟75 2021.10.12

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

随机推荐

  1. 大数据最后一公里——2021年五大开源数据可视化BI方案对比

    个人非常喜欢这种说法,最后一公里不是说目标全部达成,而是把整个路程从头到尾走了一遍. 大数据在经过前几年的野蛮生长以后,开始与数据中台的概念一同向着更实际的方向落地.有人问,数据可视化是不是等同于数据 ...

  2. 隐私安全设置:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.

    背景 访问一个内部网站时,遇到下面的问题,导致网站不能打开:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.从错误信息来看,这是由于网站的证书问题导致 ...

  3. golang 注释 exported function xxx should have comment or be unexported

    0x00 问题 exported function xxx should have comment or be unexported. 0x01 解决 https://golang.org/s/sty ...

  4. sql语句异常向数据库插入数据报错

    在php编程向数据库插入数据时报如下错误: [Err] 1064 - You have an error in your SQL syntax; check the manual that corre ...

  5. HTML基本概念及基本标签

    HTML基本概念及基本语法 1.HTML的基本概念 1.1  B/S.C/S基本概念 B/S(Browser/Server):指的是浏览器端与服务器端工作模式,优点相对节省本地存储空间,不足是需要占用 ...

  6. java中避免集合死链调用

    目录 1. 前言 2. 场景 3. 环境 3.1 开发环境准备 3.2 数据准备 3.2.1 Mysql数据库表及数据 3.2.2 redis库数据 4. 解决方式 5.完整代码 5.1Model 5 ...

  7. python学习1-博客-DB操作类

    #学习python,准备写一个博客,第一天:在别人代码基础上写一个数据库操作的db.py1)python代码 #!/usr/bin/env python # -*- coding: UTF-8 -*- ...

  8. Centos7创建swap分区

    创建4g swap分区 dd if=/dev/zero of=/var/swap bs=1024 count=4194304 mkswap /var/swap 激活swap分区 swapon /var ...

  9. ARM平台如何玩转GDB远程调试?

    前  言 关于GDB工具 GDB工具是GNU项目调试器,基于命令行使用.和其他的调试器一样,可使用GDB工具单步运行程序.单步执行.跳入/跳出函数.设置断点.查看变量等等,它是UNIX/LINUX操作 ...

  10. AT3950-[AGC022E]Median Replace【贪心,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/AT3950 题目大意 一个包含\(?,0,1\)的长度为奇数的序列,把\(?\)替换为\(0/1\).每次可以选择三 ...