题目链接:https://vjudge.net/contest/149845#overview。

  A题,水题。

  B题,给出 p个 第一个人的区间 和 q个第二个人的区间,问[l,r]中有多少个整数满足,第二个人的区间范围全部增加这个整数以后 和第一个人的区间有交集。以为是个数据结构题,后来才发现p和q的范围才50。那么暴力枚举位移dt,然后对第二个人的区间做差分标记然后看看有没有交集即可。代码如下(我发现数组越界了也能A...):

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #include <iostream>
 5 #include <map>
 6 #include <vector>
 7 using namespace std;
 8 const int N = 100000 + 5;
 9 const int mod = 1e9 + 7;
10
11 int p,q,l,r;
12 int a[55],b[55],c[55],d[55];
13 int e[1000+5],f[1000+5];
14
15 int main()
16 {
17     cin >> p >> q >> l >> r;
18     for(int i=1;i<=p;i++) scanf("%d%d",a+i,b+i);
19     for(int i=1;i<=q;i++) scanf("%d%d",c+i,d+i);
20     for(int i=1;i<=p;i++) e[a[i]]++, e[b[i]+1]--;
21     for(int i=1;i<=1000;i++) e[i] += e[i-1];
22     int ans = 0;
23     for(int dt=l;dt<=r;dt++)
24     {
25         memset(f,0,sizeof f);
26         for(int i=1;i<=q;i++) f[c[i]+dt]++, f[min(d[i]+dt+1, 1001)]--;
27         for(int i=1;i<=1000;i++)
28         {
29             f[i] += f[i-1];
30             if(f[i] > 0 && e[i] > 0)
31             {
32                 ans++;
33                 break;
34             }
35         }
36     }
37     cout << ans << endl;
38     return 0;
39 }

B

  C题,任意两个串交换 任意前缀,问第一个串能有多少种不同形式。等价于交换任意两个串的两个相同的位置。那么枚举每个位置,看看这个位置在n个串中有多少个不同的字母即可。代码如下:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #include <iostream>
 5 #include <map>
 6 using namespace std;
 7 const int N = 100 + 5;
 8 const int mod = 1e9 + 7;
 9
10 int n,m;
11 char s[N][N];
12
13 int main()
14 {
15     cin >> n >> m;
16     for(int i=1;i<=n;i++)
17     {
18         scanf("%s",s[i]+1);
19     }
20     int ans = 1;
21     for(int j=1;j<=m;j++)
22     {
23         map<char,int> M;
24         for(int i=1;i<=n;i++) M[s[i][j]]++;
25         ans = 1LL*ans * M.size() % mod;
26     }
27     cout << ans << endl;
28     return 0;
29 }

C

  D题,之前的一场CF做过的,WA了N多发的那题。。

  E题,给出 m个点,问有多少个点可以到这m个点de最短距离都不超过d。做法是在m个点中找出距离最远的两个点,然后到这两个点的距离都不超过d的点就是可行点。树上找距离最远的两个点就相当于找直径了。从任意一个点出发dfs,找到最远的在m个点中的那个点,作为V,再对那个点dfs,找在m个点中的离V的最远点,作为U。那么U和V就是m个点中距离最远的两个点了。然后再从这两个点开始dfs计算出距离即可。代码如下:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #include <iostream>
 5 #include <map>
 6 #include <vector>
 7 using namespace std;
 8 const int N = 100000 + 5;
 9 const int mod = 1e9 + 7;
10
11 int n,m,r;
12 bool can[N];
13 int U,V;
14 int max_deep;
15 vector<int> G[N];
16 void dfs(int u,int fa,int deep,int &who)
17 {
18     if(deep > max_deep && can[u])
19     {
20         who = u;
21         max_deep = deep;
22     }
23     for(int i=0;i<G[u].size();i++)
24     {
25         int v = G[u][i];
26         if(v == fa) continue;
27         dfs(v,u,deep+1,who);
28     }
29 }
30 int dis[2][N];
31 void dfs2(int u,int fa,int op)
32 {
33     for(int i=0;i<G[u].size();i++)
34     {
35         int v = G[u][i];
36         if(v == fa) continue;
37         dis[op][v] = dis[op][u] + 1;
38         dfs2(v,u,op);
39     }
40 }
41
42 int main()
43 {
44     cin >> n >> m >> r;
45     for(int i=1;i<=m;i++)
46     {
47         int x;
48         scanf("%d",&x);
49         can[x] = 1;
50     }
51     for(int i=1;i<n;i++)
52     {
53         int u,v; scanf("%d%d",&u,&v);
54         G[u].push_back(v);
55         G[v].push_back(u);
56     }
57     max_deep = -1;
58     dfs(1,-1,0,U);
59     max_deep = -1;
60     dfs(U,-1,0,V);
61     dfs2(U,-1,0);
62     dfs2(V,-1,1);
63     int ans = 0;
64     for(int i=1;i<=n;i++) if(dis[0][i] <= r && dis[1][i] <= r) ans++;
65     cout << ans << endl;
66     return 0;
67 }

E

转载于:https://www.cnblogs.com/zzyDS/p/6372961.html

2017 ZSTU寒假排位赛 #8相关推荐

  1. 2017年寒假集训分组测试赛2 Ranklist

    初级二十四点游戏 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 受李老师的影响,他4岁的孩 ...

  2. GDUT 寒假排位赛三

    [题目链接:]http://codeforces.com/group/NVaJtLaLjS/contest/238202 感想 emmmm,这套题有个特点,代码量小的考思维,而那些一眼看过去思路就有了 ...

  3. GDUT 寒假排位赛二

    直接看题 [题目链接]: http://codeforces.com/group/NVaJtLaLjS/contest/238204 A. Taming the Herd(签到题) 题意: 有一张表, ...

  4. 2017级寒假ACM集训结训赛--官方题解

    博客地址 A:SDUTOJ4142 蚂蚁花呗 AC/SUBMIT : 25/245 by:郭小冉(徐红博) 考查知识点:栈 通过简单的栈模拟,对于向左走的蚂蚁如果没有向右走的蚂蚁直接加入进栈,如果有, ...

  5. 第一次随笔之寒假作业一

    2017寒假作业一 前言 这是我第一次接触此类博客,也是第一次写博客,个人处于比较懵逼的状态.加之家里没有网络,不能边写边参考同学和老师的博客,更糟糕的是不能学习什么markdown,什么个git啊, ...

  6. SDUTOJ3771_数组计算机(线段树)

    数组计算机 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description bLue 有一个神器的机器 ...

  7. Codeforces Round #341 (Div. 2)

    在家都变的懒惰了,好久没写题解了,补补CF 模拟 A - Wet Shark and Odd and Even #include <bits/stdc++.h>typedef long l ...

  8. 大事 | 生活终于对我的联想Y430P下手了!

    文章目录 写在前面 下手前 下手中 下手后 相关链接 写在前面 如果你是个职业维修人员,请忽略本文! 如果你使用的是超薄本,请忽略本文! 如果你的电脑正常,请忽略本文! 下手前 最近干了一件" ...

  9. 北航计算机考研经验_2018届考研

    北航计算机考研经验 标签(空格分隔): 考研 我报的是计算机专硕,不分方向.初试347分,其中政治72,英语67,数学114,专业课94.2018年专硕复试线290分/学硕310分:我347分排在第6 ...

最新文章

  1. 都是套路:盘点 Java 面试中链表的几大解题模板方法!
  2. 用GDB调试程序(四)
  3. 前端获取浏览器标识_浏览器缓存机制
  4. Mozilla的Python3使用情况
  5. python客户价值分析_[Python数据挖掘]第7章、航空公司客户价值分析
  6. java创建一个图片_Java 创建一个简单的验证码图片
  7. servlet html登录,Servlet实现用户登录
  8. java学习(58):私有内部类后访问
  9. 霍尔电流传感器ACS712的性能参数和用法
  10. oracle如何规则显示,Oracle语句优化规则汇总
  11. 6大创新技术及2亿美元投入计划,这个活动有点料
  12. tensorflow2.3匹配python版本_Python 包安装和管理工具 pip 19.2 发布
  13. 拓端tecdat|Python随机波动率(SV)模型对标普500指数时间序列波动性预测
  14. 证券类私募主要需求及核心服务商
  15. php文件显示代码行数,php统计文件中的代码行数
  16. mysqldump关于--set-gtid-purged=OFF的使用(好文章!!)
  17. IDEA插件下载地址
  18. html5平板游戏列表
  19. 针对iPhone X和iPhone XS这些傻叉手机安全距离的设定
  20. pdf插入图片到指定坐标位置 亲测可用

热门文章

  1. 学python需要什么基础知识-没学过Python先要学习哪些基础知识?
  2. python语言自学-自学Python要学多久可以学会?老男孩Python培训
  3. python的none是什么-python 判断变量是否是 None 的三种写法
  4. python可以做什么工作好-Python可以做什么工作?Python有哪些方向?
  5. 上海理工大学eduroam登陆
  6. spring中bean的实例化
  7. LeetCode Insert Delete GetRandom O(1)
  8. Luhn算法验证信用卡的合法性
  9. 一个高性能RPC框架原理剖析
  10. 题目1090:路径打印