记次浙大月赛 134 - ZOJ Monthly, June 2014

链接

虽做出的很少,也记录下来,留着以后来补。。浙大题目质量还是很高的

B

并查集的一些操作,同类和不同类我是根据到根节点距离的奇偶判断的,删点是直接新加一个点,记得福大月赛也做过类似的,并差集的这类关系题目还是比较常见的,有空深究一下。

 1 #include <iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 #include<stdlib.h>
6 #include<vector>
7 #include<cmath>
8 #include<queue>
9 #include<set>
10 using namespace std;
11 #define N 600010
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 int fa[N],res[N],mp[N];
18 int dis[N];
19 int find(int x)
20 {
21 if(fa[x]!=x)
22 {
23 int ro = find(fa[x]);
24 dis[x]+=dis[fa[x]];
25 return fa[x] = ro;
26 }
27 else
28 return x;
29 }
30 int main()
31 {
32 int n,m,i;
33 char s[10];
34 while(scanf("%d%d",&n,&m)!=EOF)
35 {
36 for(i = 1; i <= n+m; i++)
37 {
38 fa[i] = i;
39 res[i] = 1;
40 mp[i] = i;
41 dis[i] = 0;
42 }
43 int g = n+1;
44 while(m--)
45 {
46 int x,y;
47 scanf("%s",s);
48 if(s[0]==‘L‘)
49 {
50 scanf("%d%d",&x,&y);
51 x = mp[x];
52 y = mp[y];
53 int tx = find(x);
54 int ty = find(y);
55 if(tx!=ty)
56 {
57 //cout<<x<<" "<<y<<" "<<tx<<" "<<ty<<endl;
58 fa[tx] = ty;
59 res[ty]+=res[tx];
60 dis[x] = dis[y]+1;
61 }
62 }
63 else if(s[0]==‘Q‘)
64 {
65 scanf("%d%d",&x,&y);
66 x = mp[x];
67 y = mp[y];
68 int tx = find(x);
69 int ty = find(y);
70 if(tx!=ty)
71 {
72 printf("Unknown\n");
73 continue;
74 }
75 if((dis[x]-dis[y])%2==0)
76 printf("Same\n");
77 else
78 printf("Different\n");
79 }
80 else if(s[0]==‘S‘)
81 {
82 scanf("%d",&x);
83 x = mp[x];
84 int tx = find(x);
85 printf("%d\n",res[tx]);
86 }
87 else
88 {
89 scanf("%d",&x);
90 int xx = mp[x];
91 int tx = find(xx);
92 res[tx]-=1;
93 mp[x] = ++g;
94 }
95 }
96 }
97 return 0;
98 }

C

离散化一下,枚举所有值所在的区间段,从左到右走一遍,采用边删边走的形式。

 1 #include <iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 #include<stdlib.h>
6 #include<vector>
7 #include<cmath>
8 #include<queue>
9 #include<set>
10 #include<map>
11 using namespace std;
12 #define N 100010
13 #define LL long long
14 #define INF 0xfffffff
15 const double eps = 1e-8;
16 const double pi = acos(-1.0);
17 const double inf = ~0u>>2;
18 map<int,int>f;
19 vector<int>ed[N];
20 vector<int>dd[N];
21 int c[N];
22 int main()
23 {
24 int n,k,i,j;
25 while(scanf("%d%d",&n,&k)!=EOF)
26 {
27 f.clear();
28 int g = 0;
29 for(i = 1; i <= n; i++)
30 {
31 ed[i].clear();
32 dd[i].clear();
33 }
34 for(i = 1; i <=n ;i++)
35 {
36 scanf("%d",&c[i]);
37 if(!f[c[i]]) f[c[i]] = ++g;
38 if(i==1)
39 {
40 dd[f[c[i]]].push_back(i);
41 continue;
42 }
43 int tg = f[c[i-1]];
44 if(c[i]!=c[i-1])
45 {
46 ed[tg].push_back(i-1);
47 dd[f[c[i]]].push_back(i);
48 }
49 }
50 ed[f[c[n]]].push_back(n);
51 int ans = 0;
52 for(i = 1; i <= g; i++)
53 {
54 int tk = 0,st=0,ss=0;
55 ss += ed[i][0]-dd[i][0]+1;
56 ans = max(ans,ss);
57
58 for(j = 1 ;j < ed[i].size() ; j++)
59 {
60 tk+=(dd[i][j]-ed[i][j-1]-1);
61 ss+=(ed[i][j]-dd[i][j]+1);
62 while(tk>k&&st<j)
63 {
64 tk-=(dd[i][st+1]-ed[i][st]-1);
65 ss-=(ed[i][st]-dd[i][st]+1);
66 st++;
67 }
68
69 ans = max(ans,ss);
70 }
71 }
72 printf("%d\n",ans);
73 }
74 return 0;
75 }

F

这题有点逗,看了半个多小时终于看懂了啥意思,然后。。一份更逗的AC代码,全部输出1.

 1 #include <iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 #include<stdlib.h>
6 #include<vector>
7 #include<cmath>
8 #include<queue>
9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 int main()
18 {
19 int t,b,e;
20 cin>>t;
21 while(t--)
22 {
23 cin>>b>>e;
24 cout<<"1\n";
25 }
26 return 0;
27 }

记次浙大月赛 134 - ZOJ Monthly, June 2014

时间: 2024-10-07 20:18:03

记次浙大月赛 134 - ZOJ Monthly, June 2014的相关文章

ZOJ Monthly, June 2014——Grouping

题目连接 题意: n个点,m条边 每条边两个整数a.b,表示a到b的有向边 求,至少需要几个集合,使得:每个集合中的元素互相不能到达 N(1≤ N≤ 100000), M(1≤ M≤ 300000) 分析: 相连的两个点不能在同一个集合中,那么,对于一个长度为n的链,至少需要n个集合:如果链中有环,相当于把环展开,这个就需要缩点处理 就是缩点之后求点权最长路 注意:模板中scc_cnt是从1开始的,如果使用缩点后的图,初始化时需要初始化总点数加一 因为总点数有限,用拓扑排序每次删除所有入度为零的

ZOJ Monthly, June 2014 解题报告

A.Another Recurrence Sequence B.Gears 题目大意:有n个齿轮,一开始各自为一组,之后进行m次操作,包括以下4种类型: 1.合并两组齿轮,合并的两个应该反向旋转 2.把某个齿轮从所在组删除,自为一组,但不影响同组其它齿轮的状态与关系 3.询问两个齿轮是同向.反向或无关系(即不在同一组) 4.询问某个齿轮所在组的齿轮总数 分析:典型的并查集操作,但是注意两点: 1.由于操作3要询问两个齿轮的相对状态,因此对并查集中每个元素应当保存它的状态信息.状态是相对的,只需要

ZOJ Monthly, June 2014 月赛BCDEFGH题题解

比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不能加油的站就会wa..太弱.. 唔···太懒第二天才发题解.. B:Gears 并查集 题解:点击打开链接 C:Consecutive Blocks 离散化一下然后模拟 题解:点击打开链接 D:An Easy Game 设dp[i][j]为前i个位置已经匹配了j个位置的方法数. #include <

135 - ZOJ Monthly, August 2014

135 - ZOJ Monthly, August 2014 A:构造问题,推断序列奇偶性.非常easy发现最小值不是1就是0.最大值不是n就是n - 1,注意细节去构造就可以 E:dp.dp[i][j]表示长度i,末尾状态为j的最大值,然后每一个位置数字取与不取,不断状态转移就可以 G:就一个模拟题没什么好说的 H:dfs,每次dfs下去,把子树宽度保存下来,然后找最大值,假设有多个.就是最大值+cnt宽度 I:构造,假设r * 2 > R,肯定无法构造.剩下的就二分底边.按等腰三角形去构造就

浙大月赛ZOJ Monthly, August 2014

Abs Problem Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Alice and Bob is playing a game, and this time the game is all about the absolute value! Alice has N different positive integers, and each number is not greater than N. Bob has a

ZOJ Monthly, November 2014

做了一次月赛,没想到这么难,加上后来补上的题目也只有3个题.第一名也只有4个题啊啊啊啊~.其中两道还是水题.留坑慢慢补上来. 3832 Tilt Cylinder 给定如图所示有盖圆柱体,R,H,水面高度h,倾角a,求水得体积. 分析:明显的数值积分题,这样考虑.圆下底面即A点与地面高度lim1, 圆上底面一点B与地面高度lim2,h所处的范围进行讨论从而确定积分几何体的两边的高度.我们积分的几何体应该是一个圆柱体被削掉一部分了. h>lim1时,几何体左半部分可以减掉一个圆柱,对剩下部分积分,

ZOJ Monthly, August 2014

H Machine http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5337 树的深搜.邻接表快一些 1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<algorithm> 5 #define mt(a,b) memset(a,b,sizeof(a)) 6 using namespace std; 7

Incircle and Circumcircle(二分+几何)浙大月赛zoj3806(详解版)图

Incircle and Circumcircle Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A triangle is one the basic shapes in geometry. It's a polygon with three vertices and three sides which are line segments. A triangle with vertices A, B, C is denot

ZOJ Monthly, September 2003【部分题解】

今天比赛做了一下这套题目.出了四道.两道水题,两道DP 比赛链接:http://vjudge.net/contest/view.action?cid=51404#problem/B 上来搞了一道水题之后就搞B题 题意很好理解,上来看了一下就懂了.以为是规律有循环节,没看wa那么多毅然决然提交,wa了一发. A = "^__^" and B = "T.T",C = BA = "T.T^__^".然后A=B,B=C,一直重复这个操作,问最后第n位的字