[CCF2015.09]题解(待填

201509-1 数列分段

水,记下前一个数,看看跟当前是否一样,不一样就ans+1

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 int n, a;
23
24 int main() {
25     // freopen("in", "r", stdin);
26     while(~scanf("%d", &n)) {
27         scanf("%d", &a);
28         int cur = a, cnt = 1;
29         for(int i = 1; i < n; i++) {
30             scanf("%d", &a);
31             if(cur != a) {
32                 cnt++;
33                 cur = a;
34             }
35         }
36         printf("%d\n", cnt);
37     }
38     return 0;
39 }

1

201509-2 日期计算

打表,注意细节就行

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 const int com[15] = {0,31,59,90,120,151,181,212,243,273,304,334, 365};
23 const int lep[15] = {0,31,60,91,121,152,182,213,244,274,305,335, 366};
24 int y, c, m, d;
25
26 int main() {
27     // freopen("in", "r", stdin);
28     while(~scanf("%d %d", &y, &c)) {
29         d = 0;
30         if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
31             for(int i = 1; i <= 12; i++) {
32                 if(lep[i] < c) {
33                     m = i;
34                 }
35                 else break;
36             }
37             d = c - lep[m];
38             m++;
39             if(d != 0) printf("%d\n%d\n", m, d);
40             else printf("%d\n%d\n", m, lep[m]-lep[m-1]);
41         }
42         else {
43             for(int i = 1; i <= 12; i++) {
44                 if(com[i] < c) {
45                     m = i;
46                 }
47                 else break;
48             }
49             d = c - com[m];
50             m++;
51             if(d != 0) printf("%d\n%d\n", m, d);
52             else printf("%d\n%d\n", m, com[m]-com[m-1]);
53         }
54     }
55     return 0;
56 }

2

201509-4 高速公路

求多少个连通对。先tarjan跑出所有连通分量,然后枚举任意两个不相等的点,看看是否属于同一个连通分量里。

  1 #include <algorithm>
  2 #include <iostream>
  3 #include <iomanip>
  4 #include <cstring>
  5 #include <climits>
  6 #include <complex>
  7 #include <fstream>
  8 #include <cassert>
  9 #include <cstdio>
 10 #include <bitset>
 11 #include <vector>
 12 #include <deque>
 13 #include <queue>
 14 #include <stack>
 15 #include <ctime>
 16 #include <set>
 17 #include <map>
 18 #include <cmath>
 19
 20 using namespace std;
 21
 22 const int maxn = 10010;
 23 const int maxm = 100010;
 24 typedef struct Edge {
 25     int u;
 26     int v;
 27     int next;
 28     Edge() { next = -1; }
 29 }Edge;
 30
 31 int head[maxn], ecnt;
 32 Edge edge[maxm];
 33 int n, m;
 34
 35 int bcnt, dindex;
 36 int dfn[maxn], low[maxn];
 37 int stk[maxn], top;
 38 int belong[maxn];
 39 bool instk[maxn];
 40
 41 void init() {
 42     memset(edge, 0, sizeof(edge));
 43     memset(head, -1, sizeof(head));
 44     memset(instk, 0, sizeof(instk));
 45     memset(dfn, 0, sizeof(dfn));
 46     memset(low, 0, sizeof(low));
 47     memset(belong, 0, sizeof(belong));
 48     ecnt = top = bcnt = dindex = 0;
 49 }
 50
 51 void adde(int uu, int vv) {
 52     edge[ecnt].u = uu;
 53     edge[ecnt].v = vv;
 54     edge[ecnt].next = head[uu];
 55     head[uu] = ecnt++;
 56 }
 57
 58 void tarjan(int u) {
 59     int v = u;
 60     dfn[u] = low[u] = ++dindex;
 61     stk[++top] = u;
 62     instk[u] = 1;
 63     for(int i = head[u]; ~i; i=edge[i].next) {
 64         v = edge[i].v;
 65         if(!dfn[v]) {
 66             tarjan(v);
 67             low[u] = min(low[u], low[v]);
 68         }
 69         else if(instk[v] && dfn[v] < low[u]) {
 70             low[u] = dfn[v];
 71         }
 72     }
 73     if(dfn[u] == low[u]) {
 74         bcnt++;
 75         do {
 76             v = stk[top--];
 77             instk[v] = 0;
 78             belong[v] = bcnt;
 79         } while(v != u);
 80     }
 81 }
 82
 83 int main() {
 84     // freopen("in", "r", stdin);
 85     int uu, vv;
 86     while(~scanf("%d %d", &n, &m)) {
 87         init();
 88         for(int i = 0; i < m; i++) {
 89             scanf("%d %d", &uu, &vv);
 90             adde(uu, vv);
 91         }
 92         for(uu = 1; uu <= n; uu++) {
 93             if(!dfn[uu]) {
 94                 tarjan(uu);
 95             }
 96         }
 97         int ans = 0;
 98         for(int i = 1; i <= n; i++) {
 99             for(int j = i + 1; j <= n; j++) {
100                 if(belong[i] == belong[j]) {
101                     ans++;
102                 }
103             }
104         }
105         printf("%d\n", ans);
106     }
107     return 0;
108 }

4

时间: 2024-09-30 19:08:58

[CCF2015.09]题解(待填的相关文章

NIOP 09 题解

2009 NOIP 提高组 题解 这次考试,呃,除了第一题就没怎么拿分.后面几道题都比较难想,想到了又不怎么写的出来,哎. 几道题总的难度都不是很大,总结最近几次做题来说,在图论上只是还是很欠缺,做题都不怎么会去想图论方面的知识,但其实只要能想到用图论知识的话最近的几道题都还是很好处理的.假期要在复习一遍图论了. 这次的题主要是读懂题. T1 潜伏者 T2 Hankson的趣味题 T3 最优贸易 T4 靶形数独 T1 额,该怎么判断怎么判断吧.旁边的cyy同学认为推出25个字母的密码可以自行推出

2019.11.09题解

写在前面: 出题人为啥三道题一个中文两个英文感觉怪怪的 A. 合并集合 标签: 区间Dp 题解: 区间Dp的裸题,刚开考的时候有点紧张没想到Dp,打了一个假的贪心,后来想到Dp的时候觉得我打贪心就是个傻子 f[i][j]代表处理完[i,j]的最大收益: f[i][j]=max{f[i][k]+f[k+1][j]+g[i][k]*g[k+1][j]} 其中g[i][j]代表[i,j]的不同元素个数,$ O(n^2) $预处理即可,总复杂度$ O(n^3) $ B. climb 标签: 二分+贪心

[CCF2015.12]题解

201512-1 数位之和 水题一个,取模除以10胡搞即可(不知道字符串为什么不行 1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <casser

Topcoder SRM 刷题企划

1.本文用来记录自己在Topcoder上刷过的题目.不过重点是记录心得,记录自己的思路问题. 2.刷的题目全部都是Div2 1000分的题目,小概率会去做Div1 的进阶题. 3.基本上自己写出来的题目都不会另开一篇来写. 4.Topcoder使用: [教程1][教程2] SRM 508 Div2 YetAnotherORProblem (Div2 Hard) 题意:构造长度为N,各元素上限为R的序列,并且满足$A_1+A_2+\cdots+A_n=A_1|A_2|\cdots|A_n$,求方案

form-validation--表单验证插件

基于jquery的validationEngine表单验证插件,根据官网提示,该插件支持IE6-8,Chrome浏览器,火狐,Safari,Opera 10,但由于有使用到了css3的阴影和圆角样式,所以在IE浏览器下无法看到圆角和阴影效果(IE 9 支持圆角效果),整体来说还是不错的. 1.默认校验规则 名称 示例 说明 required validate[required] 表示必填项 optional validate[optional] 表示可选项.若不输入,不要求必填,若有输入,则验证

【开发必读】PHP session详解

个人博客原文:http://www.phpthinking.com/archives/318 http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议.所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的.而越来越复杂的WEB应用,需要保存一些用户状态信息.这时候,Session这种方案应需而生.PHP从4.1开始支持Session管理. session是很抽象的一个概念.我们不妨先从与它几个息息相关的有迹可寻的小切入点入手,然后逐渐地认识了解它. s

遥远的国度(树链剖分,换根)

遥远的国度 题目描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀. 问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树.这个国度有一个首都,我们可以把这个首都看做整棵树的根,但遥远的国度比较奇怪,首都是随时有可能变为另外一个城市的.遥远的国度的每个城市有一个防御值,有些时候RapiD会使

用slot和component实现表单共用

业务需求 在oa开发中,有许多流程,每个流程里都会有很多字段,比如流程标题.拉下选择,附件等等,有些是每个流程都会有的,有些是特有的,按常规的方法开发,就为为一个流程写一个表单,校验,提交.如果新来流程,就复制一个表达,修改需要变更的地方.这样开发会导致很多重复的代码,而且比较凌乱 简化实现 将每一个输入框写成共用的,将必填校验判断也一并写入,比如:流程标题组件: iProcessTitle,使用详情看下方注释 <template> <div> <div v-if="

博弈论题目总结(二)——SG组合游戏及变形

SG函数 为了更一般化博弈问题,我们引入SG函数 SG函数有如下性质: 1.如果某个状态SG函数值为0,则它后继的每个状态SG函数值都不为0 2.如果某个状态SG函数值不为0,则它至少存在一个后继的状态SG函数值为0 如果某个局面SG函数值为0,则该局面先手必败 放到有向图中,该有向图的核就是SG值为0的点构成的集合 游戏的和 游戏的和的SG函数值=所有子游戏SG函数值的异或和Xor 如果所有子游戏都进行完毕,那么Xor=0,必败 如果某个状态的SG函数值为0,那么后手一定可以做出一种动作,保持