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. OSS对象存储的文件上传、解冻、下载与查看

    上传文件 cp命令用于上传.下载.拷贝文件. # 语法 ./ossutil cp [-r] file_url cloud_url # 例如 ossutil64 cp -r /remote/closed ...

  2. 这篇 Java 基础,我吹不动了

    Hey guys,这里是程序员cxuan,欢迎你收看我最新一期的文章,这篇文章我补充了一些关于<Java基础核心总结>的内容,修改了部分错别字和语句不通顺的地方,并且对内部类.泛型等内容进 ...

  3. SQL-INSERT触发器练习

    &练习一 有这样的一个基础表A,字段包括:id.type.value.create_time,主要是记录某个类型的状态变化时间和值.在插入类型(type)为'runtime' 的数据时,根据前 ...

  4. 硕盟SM-T54(TYPE C转HDMI+VGA+USB3.0+PD3.0)

    硕盟SM-T54是一款TYPE C转HDMI+VGA+USB3.0+PD3.0四口扩展坞,您可以将含有USB 3.1协议的电脑主机,通过此产品连接到具有HDMI或VGA的显示器.电视机或其他显示设备. ...

  5. PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法

    虽说是少见的一些属性方法,但是可能还是有不少同学在日常的开发中使用过,这里只是学习了可能相对来说我们用得比较少的一些 mysqli 的属性或方法.就当是扩展一下自己的知识体系. 切换用户 首先就是切换 ...

  6. fontawesome图标不显示的原因

    1.查看css路径是否正确 2.查看font文件夹内的字体文件是否引入 3.查看font文件夹内的字体资源路径是否正确

  7. Charles的breakpoint功能

    修改请求报文 比如,前端已经控制了输入内容,而我们需要验证接口是否做了校验,这时候怎么测试? 可以通过charles抓包,修改请求报文,修改为在页面上无法输入的内容,发出去然后看后台怎么处理. 修改返 ...

  8. javascript base64 encode decode 支持中文

    * 字符编码 ** 一定要知道数据的字符编码 ** 使用utf-8字符编码存储数据 ** 使用utf-8字符编码输出数据 * Crypto.js 支持中文 Base64编码说明 Base64编码要求把 ...

  9. P3980-[NOI2008]志愿者招募【费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P3980 题目大意 \(n\)天,第\(i\)天需要\(A_i\)个志愿者.有\(m\)种志愿者,第\(i\)种从\ ...

  10. 解除你学习Python自动化测试框架的所有疑惑,开启学习直通车

    学习框架第一步 前言 很多同学学完Python基础后出现迷茫......有同感的小伙伴,点赞关注........ 学习完Python还要学习什么? 什么是自动化测试框架? 如何搭建自动化测试框架? 甚 ...