T1标题统计

传送门

题目描述

凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时,空格和换行符不计算在内。

输入输出格式

输入格式:

输入文件只有一行,一个字符串 $ s $ 。

输出格式:

输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。

输入输出样例

输入样例#1:

234

输出样例#1:

3

输入样例#2:

Ca 45

输出样例#2:

4

说明

【数据规模与约定】

规定 $ |s| $ 表示字符串 $ s $ 的长度(即字符串中的字符和空格数)。

对于 $ %40 $ 的数据,$ 1 ≤ |s| ≤ 5 $ ,保证输入为数字字符及行末换行符。

对于 $ %80 $ 的数据,$ 1 ≤ |s| ≤ 5 $ ,输入只可能包含大、小写英文字母、数字字符及行末换行符。

对于 $ %100% $ 的数据,$ 1 ≤ |s| ≤ 5 $ ,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。

这个题感觉大水题吧,会用 $ gets $ 输入感觉问题就不大 。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <queue>
  7. #include <map>
  8. #include <set>
  9. #define re register
  10. using namespace std ;
  11. char s[10] ;
  12. int ans , len ;
  13. int main() {
  14. gets(s) ;
  15. len = strlen(s);
  16. for(re int i = 0 ; i < len ; ++i) {
  17. if(s[i] >= '0' && s[i] <= '9') ans ++ ;
  18. if(s[i] >= 'A' && s[i] <= 'Z') ans ++ ;
  19. if(s[i] >= 'a' && s[i] <= 'z') ans ++ ;
  20. }
  21. printf("%d\n" , ans) ;
  22. return 0 ;
  23. }

T2龙虎斗

传送门啦

题目描述

轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 $ n $ 个兵营(自左至右编号 $ 1 \sim n $ ),相邻编号的兵营之间相隔 $ 1 $ 厘米,即棋盘为长度为 $ n-1 $ 厘米的线段。$ i $ 号兵营里有 $ c[i] $ 位工兵。

下面图 1 为 $ n=6 $ 的示例:

轩轩在左侧,代表“龙”;凯凯在右侧,代表“虎”。 他们以 $ m $ 号兵营作为分界, 靠左的工兵属于龙势力,靠右的工兵属于虎势力,而第 $ m $ 号兵营中的工兵很纠结,他们不属于任何一方。

一个兵营的气势为:该兵营中的工兵数 $ \times $ 该兵营到 $ m $ 号兵营的距离;参与游戏 一方的势力定义为:属于这一方所有兵营的气势之和。

下面图 2 为 $ n = 6,m = 4 $ 的示例,其中红色为龙方,黄色为虎方:

游戏过程中,某一刻天降神兵,共有 $ s_1 $ 位工兵突然出现在了 $ p_1 $ 号兵营。作为轩轩和凯凯的朋友,你知道如果龙虎双方气势差距太悬殊,轩轩和凯凯就不愿意继续玩下去了。为了让游戏继续,你需要选择一个兵营 $ p_2 $ ,并将你手里的 $ s_2 $ 位工兵全部派往 兵营 $ p_2 $ ​ ,使得双方气势差距尽可能小。

注意:你手中的工兵落在哪个兵营,就和该兵营中其他工兵有相同的势力归属(如果落在 $ m $ 号兵营,则不属于任何势力)。

输入输出格式

输入格式:

输入文件的第一行包含一个正整数 $ n $ ,代表兵营的数量。

接下来的一行包含 $ n $ 个正整数,相邻两数之间以一个空格分隔,第 $ i $ 个正整数代 表编号为 $ i $ 的兵营中起始时的工兵数量 $ c[i] $ 。

接下来的一行包含四个正整数,相邻两数间以一个空格分隔,分别代表 $ m,p_1,s_1,s_2 $ 。

输出格式:

输出文件有一行,包含一个正整数,即 $ p_2 $ ,表示你选择的兵营编号。如果存在多个编号同时满足最优,取最小的编号。

输入输出样例

输入样例#1:

6

2 3 2 3 2 3

4 6 5 2

输出样例#1:

2

输入样例#2:

6

1 1 1 1 1 16

5 4 1 1

输出样例#2:

1

说明

【输入输出样例 1 说明】

见问题描述中的图 2。

双方以 $ m=4 $ 号兵营分界,有 $ s_1=5 $ 位工兵突然出现在 $ p_1=6 $ 号兵营。 龙方的气势为:

$ 2 \times (4-1)+3 \times (4-2)+2 \times (4-3) = 142×(4−1)+3×(4−2)+2×(4−3)=14 $

虎方的气势为:

$ 2 \times (5 - 4) + (3 + 5) \times (6 - 4) = 182×(5−4)+(3+5)×(6−4)=18 $

当你将手中的 $ s_2 = 2 $ 位工兵派往 $ p_2 = 2 $ 号兵营时,龙方的气势变为:

$ 14 + 2 \times (4 - 2) = 1814+2×(4−2)=18 $

此时双方气势相等。

【输入输出样例 2 说明】

双方以 $ m = 5 $ 号兵营分界,有 $ s_1 = 1 $ 位工兵突然出现在 $ p_1 = 4 $ 号兵营。

龙方的气势为:

$ 1 \times (5 - 1) + 1 \times (5 - 2) + 1 \times (5 - 3) + (1 + 1) \times (5 - 4) =11 $

虎方的气势为:

$ 16 \times (6 - 5) = 16 $

当你将手中的 $ s_2 = 1 $ 位工兵派往 $ p_2 = 1 $ 号兵营时,龙方的气势变为:

$ 11 + 1 \times (5 - 1) = 15 $

此时可以使双方气势的差距最小。

【数据规模与约定】

$ 1 < m < n,1 ≤ p_1 ≤ n $ 。

对于 $ %20 $ 的数据,$ n = 3,m = 2, c_i = 1, s_1,s_2 ≤ 100 $ 。

另有 $ %20 $ 的数据,$ n ≤ 10, p_1 = m, c_i = 1, s_1,s_2 ≤ 100 $ 。

对于 $ %60 $ 的数据,$ n ≤ 100, c_i = 1, s_1,s_2 ≤ 100 $ 。

对于 $ %80 $ 的数据,$ n ≤ 100, c_i,s_1,s_2 ≤ 100 $ 。

对于 $ %100 $ 的数据, $ n≤10^5

,c_i,s_1,s_2≤10^9 $ 。

分析:

这个题是很纯的模拟题,就是各种符号有点乱,注意不要打错就好了。模拟的时候在每个点上都加上一次试试,不会超时,而且实现更简单,维护一个最小的差。

需要注意的是如果我们加上这些士兵之后比原来的差值还大,那就放 $ m $ 号点上就好了( $ m $ 点加没加无所谓)

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <map>
  7. #include <queue>
  8. #define re register
  9. using namespace std ;
  10. const int maxn = 1e5 + 3 ;
  11. inline long long read() {
  12. char ch = getchar();
  13. long long f = 1 , x = 0;
  14. while(ch > '9' || ch < '0') { if(ch == '-') f = -1 ; ch = getchar () ;}
  15. while(ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3 ) + ch - '0' ; ch = getchar() ;}
  16. return x * f;
  17. }
  18. long long n , c[maxn] , m , p1 , s1 , s2 , p2 ;
  19. long long now1 , now2 ;
  20. int main () {
  21. //freopen("lhd.in","r",stdin);
  22. n = read() ;
  23. for(re int i = 1 ; i <= n ; ++ i) {
  24. c[i] = read() ;
  25. }
  26. m = read() ; p1 = read() ; s1 = read() ; s2 = read() ;
  27. c[p1] += s1 ;
  28. for(re int i = 1 ; i <= m - 1 ; ++ i) now1 += (m - i) * c[i] ;
  29. for(re int i = m + 1 ; i <= n ; ++ i) now2 += (i - m) * c[i] ;
  30. //printf("\n%lld\n%lld\n\n" , now1 , now2) ;
  31. long long cha = 1e9 ;
  32. long long f = 0 ;
  33. if(now1 == now2) printf("%lld\n" , m) ;
  34. else if(now1 > now2) {
  35. for(re int i = m + 1 ; i <= n ; ++ i) {
  36. if(now2 + (i - m) * s2 == now1) {
  37. f = i ;
  38. break ;
  39. }
  40. else {
  41. if(cha > abs(now2 + (i - m) * s2 - now1)) {
  42. cha = abs(now2 + (i - m) * s2 - now1) ;
  43. f = i ;
  44. }
  45. }
  46. }
  47. if(now1 - now2 < cha) printf("%lld\n" , m) ;
  48. else printf("%lld\n" , f) ;
  49. }
  50. else {
  51. for(re int i = 1 ; i <= m - 1 ; ++ i) {
  52. if(now1 + (m - i) * s2 == now2) {
  53. f = i ;
  54. break ;
  55. }
  56. else {
  57. if(cha > abs(now1 + (m - i) * s2 - now2)) {
  58. f = i ;
  59. cha = abs(now1 + (m - i) * s2 - now2) ;
  60. }
  61. }
  62. }
  63. if(now2 - now1 < cha) printf("%lld\n" , m) ;
  64. else printf("%lld\n" , f) ;
  65. }
  66. return 0 ;
  67. }

对称二叉树

传送门

题目描述

一棵有点权的有根树如果满足以下条件,则被轩轩称为对称二叉树:

  1. 二叉树;
  2. 将这棵树所有节点的左右子树交换,新树和原树对应位置的结构相同且点权相等。

下图中节点内的数字为权值,节点外的 id 表示节点编号。

现在给出一棵二叉树,希望你找出它的一棵子树,该子树为对称二叉树,且节点数 最多。请输出这棵子树的节点数。

注意:只有树根的树也是对称二叉树。本题中约定,以节点 $ T $ 为子树根的一棵“子 树”指的是:节点 $ T $ 和它的全部后代节点构成的二叉树。

输入输出格式

输入格式:

第一行一个正整数 $ n $ ,表示给定的树的节点的数目,规定节点编号 $ 1 \sim n $ ,其中节点 $ 1 $ 是树根。

第二行 $ n $ 个正整数,用一个空格分隔,第 $ i $ 个正整数 $ v_i $ 代表节点 $ i $ 的权值。

接下来 $ n $ 行,每行两个正整数 $ l_i , r_i $ ,分别表示节点 $ i $ 的左右孩子的编号。如果不存在左 / 右孩子,则以 $ -1 $ 表示。两个数之间用一个空格隔开。

输出格式:

输出文件共一行,包含一个整数,表示给定的树的最大对称二叉子树的节点数。

输入输出样例

输入样例#1:

2

1 3

2 -1

-1 -1

输出样例#1:

1

输入样例#2:

10

2 2 5 5 5 5 4 4 2 3

9 10

-1 -1

-1 -1

-1 -1

-1 -1

-1 2

3 4

5 6

-1 -1

7 8

输出样例#2:

3

【数据规模与约定】

共 $ 25 $ 个测试点。 $ v_i ≤ 1000 $ 。

测试点 $ 1 \sim 3, n ≤ 10 $ ,保证根结点的左子树的所有节点都没有右孩子,根结点的右 子树的所有节点都没有左孩子。

测试点 $ 4 \sim 8 , n ≤ 10 $ 。

测试点 $ 9 \sim 12, n ≤ 10^5 $ ,保证输入是一棵“满二叉树” 。

测试点 $ 13 \sim 16, n ≤ 10^5 $ ,保证输入是一棵“完全二叉树”。

测试点 $ 17 \sim 20, n ≤ 10^5 $ ,保证输入的树的点权均为 1。

测试点 $ 21 \sim 25, n ≤ 10^6 $ 。

本题约定:

层次:节点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一节 点的层次等于其父亲节点的层次加 $ 1 $ 。

树的深度:树中节点的最大层次称为树的深度。

满二叉树:设二叉树的深度为 $ h $ ,且二叉树有 $ 2h-1 $ 个节点,这就是满二叉树。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <map>
  7. using namespace std ;
  8. #define re register
  9. const int maxn = 1e6 + 3 ;
  10. inline int read () {
  11. int f = 1 , x = 0 ;
  12. char ch = getchar() ;
  13. while(ch > '9' || ch < '0') {if(ch == '-') f = -1 ; ch = getchar () ;}
  14. while(ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + ch - '0' ; ch = getchar () ;}
  15. return x * f ;
  16. }
  17. int n , v[maxn] ;
  18. int l[maxn] , r[maxn] ;
  19. int ch[maxn][2] , c[maxn] , ans ;
  20. //c[]记录当前最大的节点数
  21. bool check (int a , int b) {
  22. //判断两个点是否对称
  23. if(a == b) return true ; //同一个点也算对称
  24. //if(!a || !b) return false ;
  25. if(v[a] != v[b]) return false ; //值不相等不算
  26. return (check(ch[a][1] , ch[b][2]) && check(ch[a][2] , ch[b][1]) ) ;
  27. }
  28. inline void dfs (int x) {
  29. if(!x) return ;
  30. dfs(ch[x][1]) ;
  31. dfs(ch[x][2]) ;
  32. c[x] = 1 + c[ch[x][1]] + c[ch[x][2]] ;
  33. //该点最大节点数 = 本身 1 + 左儿子的节点数 + 右儿子的节点数 ;
  34. v[x] = v[x] + v[ch[x][1]] + v[ch[x][2]] ;
  35. //为了判断(两个子树中的总值不相等也说明不对称)
  36. if(ans < c[x] && check(ch[x][1] , ch[x][2])) //左右儿子对称
  37. ans = c[x] ;
  38. }
  39. int main () {
  40. n = read () ;
  41. for(re int i = 1 ; i <= n ; ++ i) {
  42. v[i] = read () ;
  43. }
  44. v[0] = 1005 ;
  45. for(re int i = 1 ; i <= n ; ++ i) {
  46. l[i] = read () ;
  47. if(l[i] != -1) ch[i][1] = l[i] ;
  48. r[i] = read () ;
  49. if(r[i] != -1) ch[i][2] = r[i] ;
  50. }
  51. dfs(1) ;
  52. printf("%d\n" , ans ) ;
  53. return 0 ;
  54. }

NOIp 2018 普及组的更多相关文章

  1. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

  2. 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题

    洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...

  3. NOIp 2018 普及&提高组试题答案

    你们考的咋样呢?在评论区说出自己的分数吧!

  4. NOIP 2018 提高组初赛试题 题目+答案+简要解析

    一.单项选择题(共 10  题,每题 2  分,共计 20  分: 每题有且仅有一个正确选项)       1. 下列四个不同进制的数中,与其它三项数值上不相等的是( ). A. (269) 16 B ...

  5. NOIp 2018 提高组

    T1铺设道路 传送门 题目描述 春春是一名道路工程师,负责铺设一条长度为 $ n $ 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 $ n $ 块首尾相连的区域,一开始,第 ii ...

  6. NOIP 2018 提高组初赛解题报告

    单项选择题: D 进制转换题,送分: D 计算机常识题,Python是解释运行的: B 常识题,1984年小平爷爷曰:“娃娃抓起”: A 数据结构常识题,带进去两个数据就可以选出来: D 历年真题没有 ...

  7. NOIP 2014 普及组 T4 子矩阵

    [题意] 已知:n,m,r,c,a[i][j] (1 ≤ n ≤ 16, 1 ≤ m ≤ 16,1 ≤ a[i][j] ≤1000,1 ≤ r ≤ n, 1 ≤ c ≤ m) 条件:矩阵的分值定义为每 ...

  8. NOIP 2014 普及组 T3 螺旋矩阵

    [题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...

  9. NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成, ...

随机推荐

  1. du 显示 前面以及或者两级的目录大小的方法

    mark 一下 du -h --max-depth=

  2. 【刷题】BZOJ 4289 PA2012 Tax

    Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...

  3. BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集

    传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...

  4. 枚举类型---java基础代码

    package com.mon11.day4; /** * 类说明 :定义枚举 * @author 作者 : chenyanlong * @version 创建时间:2017年11月4日 */ pub ...

  5. JDBC编程示例

    package com.lovo.test; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLE ...

  6. CentOS6.8下安装Nginx-1.9.15

    1. 简介 Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器. Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BS ...

  7. 数学:莫比乌斯反演-GCD计数

    Luogu3455:莫比乌斯反演进行GCD计数 莫比乌斯反演就是用来解决这一类问题的,通常f函数是要求的那个,F函数是显然的 这样利用F的结果就可以推出来f的结果 在计算结果的时候整除分快儿一下就可以 ...

  8. 转自知乎大神----JS 的 new 到底是干什么的?

    大部分讲 new 的文章会从面向对象的思路讲起,但是我始终认为,在解释一个事物的时候,不应该引入另一个更复杂的事物. 今天我从「省代码」的角度来讲 new. --------------------- ...

  9. AngularJS 启程

    <!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UT ...

  10. [转] 解决RegexKitLite编译报错

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/3984254.html ,转载请注明出处. 在编译RegexKitLite的时候,报错如下: Undefined ...