最近好颓啊,所以啥都做不出来

简单说一下这次考试,分机房了,还分不同考卷,果然我还是留在二机房的蒟蒻,

大概也只有这样的简单题,才能勉强水个rank 3吧........

其实不必管在哪个机房,努力便好,不必在意什么,这么多的考试,对于成绩的好与坏大概都看淡了,无论如何无愧于心便好。

************************

T1 字符串

一看就是卡特兰的裸题,

卡特兰........(留坑待补...)

然后C(n+m,n)-C(n+m,m-1)结束了

 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<string>
6 #include<algorithm>
7 #define int long long
8 #define MAXN 2500001
9 using namespace std;
10 const int mod=20100403;
11 int n,m;
12 int jie[MAXN];
13 int poww(int x,int y)
14 {
15 int ans=1ll;
16 while(y)
17 {
18 if(y&1)ans=ans*x%mod;
19 x=x*x%mod;
20 y>>=1;
21 }
22 return ans%mod;
23 }
24 int C(int x,int y)
25 {
26 if(y>x)return 0;
27 if(y==0)return 1;
28 return jie[x]%mod*poww(jie[y]%mod,mod-2)%mod*poww(jie[x-y]%mod,mod-2)%mod;
29 }
30 signed main()
31 {
32 //freopen("text.in","r",stdin);
33 //freopen("a.out","w",stdout);
34 scanf("%lld%lld",&n,&m);
35 jie[0]=1;jie[1]=1;
36 for(int i=2;i<=n+m+1;++i)jie[i]=(jie[i-1]*i)%mod;
37 if(n<m)printf("0\n");
38 else
39 printf("%lld\n",(C(n+m,n)-C(n+m,m-1)+mod)%mod);
40 }

T2乌鸦喝水

打链接表能水到90??????

正解:

我们考虑维护变量pos_water(表示当前乌鸦在哪喝水),pos表示当前轮到谁喝完了

我们预处理出每缸水能下降的次数然后sort一边,

易知,在i被下降到不能喝之前,i+1肯定能喝

根据性质,我们令pos_water移动

树狀数组维护从当前喝水点到n可喝水的缸数,

假设缸数加上上一个状态的cnt<此时节点的val,那么直接跳

不然二分查找停在那个位置

  1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<string>
6 #include<algorithm>
7 #include<map>
8 #include<vector>
9 #include<stack>
10 #include<queue>
11 #define MAXN 2000001
12 #define ps push_back
13 #define int long long
14 using namespace std;
15 int c[MAXN];
16 struct node{int id,val;}e[MAXN];
17 int n,m;
18 int lowbit(int x){return x&(-x);}
19 void add(int x,int k)
20 {
21 for(int i=x;i<=n;i+=lowbit(i))
22 {
23 c[i]+=k;
24 }
25 }
26 int query(int x)
27 {
28 int ans=0;
29 for(int i=x;i>=1;i-=lowbit(i))
30 {
31 ans+=c[i];
32 }
33 return ans;
34 }
35 int adds[MAXN];
36 bool cmp(node a,node b)
37 {
38 return (a.val!=b.val)?(a.val<b.val):(a.id<b.id);
39 }
40 int k;
41 signed main()
42 {
43
44 //freopen("text.in","r",stdin);
45 //freopen("b.out","w",stdout);
46 scanf("%lld%lld%lld",&n,&m,&k);
47 for(int i=1;i<=n;++i){scanf("%lld",&e[i].val);e[i].id=i;add(e[i].id,1);}
48 for(int i=1;i<=n;++i)scanf("%lld",&adds[i]);
49 for(int i=1;i<=n;++i)
50 {
51 e[i].val=(k-e[i].val)/adds[i]+1;
52 //printf("e[%lld].val=%lld\n",i,e[i].val);
53 }
54 sort(e+1,e+n+1,cmp);
55 int pos=1,pos_water=0,cnt=0,cir=0;
56 for(pos=1;pos<=n;++pos)if(e[pos].val!=0)break;
57 int pos_id=e[pos].id;
58 while(pos<=n&&cir<m)
59 {
60 int nxt=query(n);
61 int last=query(pos_water);
62 pos_id=e[pos].id;
63 //printf("pos=%lld nxt=%lld last=%lld %lld\n",pos,nxt,last,cir);
64 //printf("比较%lld %lld\n",nxt+cnt-last,e[pos].val);
65 if(nxt+cnt-last<e[pos].val)
66 {
67 cnt+=nxt-last;
68 cir++;
69 pos_water=0;
70 //printf("更改 pos_water=%lld cnt=%lld cir=%lld\n",pos_water,cnt,cir);
71 }
72 else if(nxt+cnt-last==e[pos].val)
73 {
74 cnt+=nxt-last;
75 cir++;
76 pos_water=0;
77 add(e[pos].id,-1);
78 pos++;
79 pos_id=e[pos].id;
80 }
81 else
82 {
83 int l=pos_water+1;int r=n;int end_pos=pos_water;
84 //printf("l%lld r=%lld\n",l,r);
85 while(l+1<r)
86 {
87 int mid=(l+r)>>1;
88 if(query(mid)-last+cnt>e[pos].val)
89 r=mid;
90 else l=mid;
91 }
92 if(query(l)+cnt-last==e[pos].val)
93 {
94 end_pos=l;
95 }
96 else if(query(r)+cnt-last==e[pos].val)
97 end_pos=r;
98 cnt+=query(end_pos)-last;
99 if(end_pos!=n)
100 pos_water=end_pos;
101 else
102 {
103 cir++;
104 pos_water=0;
105 }
106 add(pos_id,-1);
107 pos++;pos_id=e[pos].id;
108 //printf("新pos_water=%lld cnt=%lld %lld %lld\n",pos_water,cnt,pos,cir);
109 }
110 if(cir>=m&&pos>=n)break;
111 }
112 printf("%lld\n",cnt);
113 }

T3

tarjan

然后DFS会炸成n^2

要用拓扑

记清楚!!!!!!!!!!!!!!!!!!

  1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<string>
6 #include<algorithm>
7 #include<map>
8 #include<vector>
9 #include<stack>
10 #include<queue>
11 #define MAXN 2000001
12 #define ps push_back
13 using namespace std;
14 int n,R,C;
15 vector<int>lie[MAXN];
16 vector<int>hang[MAXN];
17 int dx[8]={0,1,0,-1,1,1,-1,-1};
18 int dy[8]={1,0,-1,0,-1,1,1,-1};
19 map<pair<int,int>,int>h;
20 struct no{int to,n;}e1[MAXN*2],e2[MAXN*2];
21 int head1[MAXN],tot1;int head2[MAXN],tot2;
22 void add1(int u,int v)
23 {
24 e1[++tot1].to=v;e1[tot1].n=head1[u];head1[u]=tot1;
25 }
26 void add2(int u,int v)
27 {
28 e2[++tot2].to=v;e2[tot2].n=head2[u];head2[u]=tot2;
29 }
30 struct node{int x,y,data,id;}e[MAXN];
31 int read()
32 {
33 int x=0;char c=getchar();
34 while(c<'0'||c>'9')
35 {
36 c=getchar();
37 }
38 while(c>='0'&&c<='9')
39 {
40 x=(x<<1)+(x<<3)+(c^48);
41 c=getchar();
42 }
43 return x;
44 }
45 int d[MAXN];
46 bool vis[MAXN];int maxn;int cnt;
47 stack<int>q;int belong[MAXN];
48 vector<int>v[MAXN];
49 int de=0,dfn[MAXN],low[MAXN];
50 void tarjan(int x)
51 {
52 dfn[x]=low[x]=++de;vis[x]=1;q.push(x);
53 for(int i=head1[x];i;i=e1[i].n)
54 {
55 int to=e1[i].to;
56 if(!dfn[to])
57 {
58 tarjan(to);
59 low[x]=min(low[x],low[to]);
60 }
61 else if(vis[to])
62 {
63 low[x]=min(low[x],low[to]);
64 }
65 }
66 if(dfn[x]==low[x])
67 {
68 cnt++;
69 int top=0;
70 while(top!=x)
71 {
72 top=q.top();q.pop();vis[top]=0;v[cnt].ps(top);belong[top]=cnt;d[cnt]++;
73 }
74 }
75 }
76 int ru[MAXN];
77 void init()
78 {
79 for(int x=1;x<=n;++x)
80 {
81 for(int i=head1[x];i;i=e1[i].n)
82 {
83 int to=e1[i].to;
84 if(belong[x]==belong[to])continue;
85 add2(belong[x],belong[to]);
86 ru[belong[to]]++;
87 }
88 }
89 }
90 int len[MAXN];
91 queue<int>qq;
92 void tuopu()
93 {
94 for(int i=1;i<=cnt;++i)
95 {
96 if(ru[i]==0){qq.push(i);len[i]=d[i];}
97 }
98 while(!qq.empty())
99 {
100 int x=qq.front();
101 qq.pop();
102 for(int i=head2[x];i;i=e2[i].n)
103 {
104 int to=e2[i].to;
105 len[to]=max(len[x]+d[to],len[to]);
106 maxn=max(len[to],maxn);ru[to]--;
107 if(ru[to]==0)qq.push(to);
108 }
109 }
110 }
111 signed main()
112 {
113 n=read();R=read();C=read();
114 for(int i=1;i<=n;++i)
115 {
116 e[i].x=read();e[i].y=read();e[i].data=read();
117 e[i].id=i;
118 hang[e[i].x].ps(i);
119 lie[e[i].y].ps(i);
120 h[make_pair(e[i].x,e[i].y)]=e[i].id;
121 }
122 for(int i=1;i<=n;++i)
123 {
124 if(e[i].data==1)
125 {
126 for(int k=0;k<hang[e[i].x].size();++k)
127 {
128 int j=hang[e[i].x][k];
129 if(j==e[i].id)continue;
130 add1(e[i].id,j);
131 }
132 }
133 if(e[i].data==2)
134 {
135 for(int k=0;k<lie[e[i].y].size();++k)
136 {
137 int j=lie[e[i].y][k];
138 if(j==e[i].id)continue;
139 add1(e[i].id,j);
140 }
141 }
142 if(e[i].data==3)
143 {
144 for(int j=0;j<=7;++j)
145 {
146 int x=e[i].x;int y=e[i].y;
147 if(h[make_pair(x+dx[j],y+dy[j])]!=0)
148 {
149 add1(e[i].id,h[make_pair(x+dx[j],y+dy[j])]);
150 }
151 }
152 }
153 }
154 for(int i=1;i<=n;++i)
155 {
156 if(!dfn[i])tarjan(i);
157 }
158 init();tuopu();
159 printf("%lld\n",maxn);
160 }

「模拟8.18」字符串(卡特兰数)·乌鸦喝水(树状数组,二分)·所驼门王的宝藏(tarjan,拓扑)的更多相关文章

  1. 「BZOJ1924」「SDOI2010」 所驼门王的宝藏 tarjan + dp(DAG 最长路)

    「BZOJ1924」[SDOI2010] 所驼门王的宝藏 tarjan + dp(DAG 最长路) -------------------------------------------------- ...

  2. 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏

    T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...

  3. noip模拟5[string·matrix·big·所驼门王的宝藏]

    怎么说呢这一场考得还算可以呢 拿了120pts,主要是最后一个题灵光开窍,想起来是tarjan,然后勉勉强强拿了40pts,本来是可以拿满分的,害 没事考完了就要反思 这场考试我心态超好,从第一个题开 ...

  4. 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)

    前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...

  5. 求序列A中每个数的左边比它小的数的个数(树状数组)

    给定一个有N个正整数的序列A(N<=10^5,A[i]<=10^5),对序列中的每一个数,求出序列中它左边比它小的数的个数. 思路:树状数组的经典应用(裸题) #include <i ...

  6. 【CSP模拟赛】奇怪的队列(树状数组 &二分&贪心)

    题目描述 nodgd的粉丝太多了,每天都会有很多人排队要签名.  今天有n个人排队,每个人的身高都是一个整数,且互不相同.很不巧,nodgd今天去忙别的事情去了,就只好让这些粉丝们明天再来.同时nod ...

  7. 「BZOJ 1924」「SDOI 2010」所驼门王的宝藏「Tarjan」

    题意 一个\(r\times c\)的棋盘,棋盘上有\(n\)个标记点,每个点有三种类型,类型\(1\)可以传送到本行任意标记点,类型\(2\)可以传送到本列任意标记点,类型\(3\)可以传送到周围八 ...

  8. [JZOJ 5908] [NOIP2018模拟10.16] 开荒(kaihuang)解题报告 (树状数组+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2529/1 题目: 题目背景:尊者神高达作为一个萌新,在升级路上死亡无数次后被一只大黄叽带回了师门.他加入师门 ...

  9. [CSP-S模拟测试]:柱状图(树状数组+二分+三分)

    题目描述 $WTH$获得了一个柱状图,这个柱状图一共有$N$个柱子,最开始第$i$根柱子的高度为$x_i$,他现在要将这个柱状图排成一个屋顶的形状,屋顶的定义如下:$1.$屋顶存在一个最高的柱子,假设 ...

随机推荐

  1. L SERVER 数据库被标记为“可疑”的解决办法

    问题背景: 日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoint_Config)进行些不正常操作如数据库在读写时而无故停 ...

  2. windows的SEH异常处理以及顶层异常处理

    前言 windows的SEH结构化异常处理是基于线程的,传统的SEH结构化异常会基于堆栈形成一条包含异常回调函数地址的链(SEH链).而fs:[0](TEB的第一个字段)指向这条链的链头,当有异常发生 ...

  3. 笔记·RCNN系相关

    这篇博客总述了从RCNN到Mask RCNN的发展过程 https://blog.csdn.net/heavenpeien/article/details/80534963 简单的说,Fast RCN ...

  4. Zabbix 监控介绍

    Zabbix 监控介绍 1.Zabbix监控架构 2.Zabbix 优点 开源无软件成本投入 Server对设备性能要求低 支持设备多,自带多种监控模板 支持分布式集中管理,有自动发现功能,可以实现自 ...

  5. "sar"工具 利用率

    LTP--linux稳定性测试 linux性能测试 ltp压力测试   余二五 2017-11-14 16:20:00 浏览1172 linux 日志 配置 内存管理 测试 脚本 性能测试 压力测试 ...

  6. jmeter从安装到使用

    最近,项目需要做接口测试,在python和jmeter之前选择,最终还是选择jmeter,虽然脚本管理及持续集成方面有所不便,但胜在使用简单,调试方便,方便后续做并发压力测试,而且最后的报告统计图表也 ...

  7. IT菜鸟之路由器基础配置(静态、动态、默认路由)

    路由器:连接不同网段的设备 企业级路由和家用级路由的区别: 待机数量不同(待机量) 待机量:同时接通的终端设备的数量 待机量的值越高,路由的性能越好 别墅级路由,表示信号好,和性能无关 交换机:背板带 ...

  8. linux进阶之gitlab仓库搭建及免密使用

    一.Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类 ...

  9. cp1 项目管理概述

    项目不成功:问题很多 chapter__1 ① 任务不明确 ② 变更 ③ 新技术 ④ 成本 ⑤ 进度 ⑥ 质量问题 ⑦ 开发混乱 ⑧ 用户 项目定义 项目 (Project) 是为了创造一个唯一的产品 ...

  10. linux系统ifconfig中网卡名和网卡配置文件名称不同的解决办法

    比如我的配置文件, cd /etc/sysconfig/network-scripts/ifcfg-eth1是这个名称,但是我使用ifconfig显示的信息却是 eth0,很明显这不是我配置文件的名称 ...