# 7-17题解整理

A - A Card Game

简单公式推导 >   ( n - 1 ) ! * a [ 1 ] / n !

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6
 7 int a[105], n;
 8
 9 int main() {
10     int t; scanf("%d", &t);
11     int cnt = 0;
12     while (t--) {
13         scanf("%d", &n);
14         int sum = 0;
15         for(int i = 1;i <= n; ++i) {
16             scanf("%d", &a[i]);
17             sum += a[i];
18         }
19         double ans = (double) a[1] / sum;
20         printf("Case %d: %.6lf\n", ++cnt, ans);
21     }
22     return 0;
23 }

# [F - Random Sequence]

暴力找规律+打表

 // 打表 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cmath>
 4 using namespace std;
 5
 6 int a[20];
 7
 8 int main() {
 9     for (int n = 1; n <= 15; ++n) {
10         double ans = 0;
11         for (int i = 0; i < (1 << n); ++i) {
12             for (int j = 0; j < n; ++j) {
13                 if (i & (1 << j)) a[j] = 1;
14                 else a[j] = -1;
15             }
16             int maxn = 0;
17             for (int len = 1; len <= n; ++len)
18                 for (int j = 0; j + len - 1 < n; ++j) {
19                     int sum = 0;
20                     for (int k = j; k <= j + len - 1; ++k) {
21                         sum += a[k];
22                         maxn = max(maxn, abs(sum));
23                     }
24                 }
25             ans += maxn;
26         }
27         printf("%.6f\n", ans / pow(2, n));
28     }
29     return 0;
30 }

找规律:

 1 #include <cstdio>
 2
 3 double a[1505];
 4
 5 void init() {
 6     double d = 1.0 / 2;
 7     a[1] = 1;
 8     for (int i = 2; i <= 1500; ++i) {
 9         if (i % 2 == 0 && i != 2)
10             d *= 1.0 * (i - 1) / i;
11         a[i] = a[i - 1] + d;
12     }
13 }
14
15 int main() {
16     init();
17     int t; scanf("%d", &t);
18     int cas = 0, n;
19     while (t--) {
20         scanf("%d", &n);
21         printf("Case %d: %.6f\n", ++cas, a[n]);
22     }
23     return 0;
24 }

# [H - SanguoSHA]

6!*6!全排列暴力,注意全排列是从当前字典序开始的,用之前需要重新排序.

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <map>
 6 #include <vector>
 7 using namespace std;
 8
 9 vector <string> vec[7], ans;
10 string name[7];
11
12 int main() {
13     int t; scanf("%d", &t);
14     int cnt = 0;
15     while (t--) {
16         int n; scanf("%d", &n);
17         ans.clear();
18         for (int i = 0; i < 7; ++i) vec[i].clear();
19         for (int i = 1; i <= n; ++i) cin >> name[i];
20         for (int i = 1; i <= n; ++i) {
21             int y; scanf("%d", &y);
22             while (y--) {
23                 string x; cin >> x;
24                 vec[i].push_back(x);
25             }
26         }
27         int tmp[7];
28         sort(name + 1, name + n + 1);
29         do {
30             for (int i = 1; i <= n; ++i) tmp[i] = i;
31             bool flag2 = 0;
32             do {
33                 int p1 = 1, p2 = 1;
34                 while (1) {
35                     int flag = 1;
36                     for (int i = 0; i < (int) vec[tmp[p1]].size(); ++i)
37                         if (vec[tmp[p1]][i] == name[p2]) {
38                             p2++;
39                             flag = 0;
40                             break;
41                         }
42                     if (flag) p1++;
43                     if (p1 == n + 1 && p2 <= n)
44                         break;
45                     if (p2 == n + 1 && p1 <= n){
46                         flag2 = 1;
47                         break;
48                     }
49                 }
50                 if (flag2) break;
51             } while (next_permutation(tmp + 1, tmp + n + 1));
52             if (flag2 == 0) {
53                 string t; t.append(name[1]);
54                 for (int i = 2; i <= n; ++i)
55                     t.append(" " + name[i]);
56                 ans.push_back(t);
57             }
58         } while (next_permutation(name + 1, name + n + 1));
59         int f = ans.size();
60         printf("Case %d: %s\n", ++cnt, f ? "Yes" : "No");
61         if (f) cout << ans[0] << endl;
62     }
63     return 0;
64 }

# J - Phage War

是一道简单的贪心,让等待时间最长的最先来就行.

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 const int N = 1e5 + 5;
 6
 7 struct node {
 8     int s, t;
 9 } a[N];
10
11 bool cmp(node a, node b) {
12     if (a.t == b.t) return a.s > b.s;
13     return a.t > b.t;
14 }
15
16 int main() {
17     int cnt = 0, n;
18     int t; scanf("%d", &t);
19     while (t--) {
20         scanf("%d", &n);
21         for (int i = 1; i <= n; ++i)  scanf("%d%d", &a[i].s, &a[i].t);
22         sort(a + 1, a + n + 1, cmp);
23         int t = 0, maxn = 0;
24         for (int i = 1; i <= n; ++i) {
25             t += a[i].s;
26             maxn = max(t + a[i].t, maxn);
27         }
28         printf("Case %d: %d\n", ++cnt, maxn);
29     }
30     return 0;
31 }
时间: 2024-10-25 13:30:39

# 7-17题解整理的相关文章

【题解整理】二分题

[题解整理]二分题 题目类型: 二分查找: 二分答案. 大致解题思路: 查找注意有序和返回值: 浮点数注意精度: 整数注意返回值,建议另外维护一个变量,用于储存可行解. 题目 分类 传送门 WA点 poj 2785 二分查找 题解 lightoj 1088 二分查找 题解 lightoj 1307 二分查找 题解 longlong poj 2456 整数二分答案 题解 poj 3104 整数二分答案 题解 poj 3258 整数二分答案 题解 poj 3273 整数二分答案 题解 lightoj

【题解整理】西安邀请赛部分题题解

很抱歉,学校的OJ并不支持外网,而且还没有加上题目... A 字符串基本处理 http://blog.csdn.net/polossk/article/details/27113175 B 状态压缩加剪枝,但是我们没敢做 C 单源点最短路 http://blog.csdn.net/polossk/article/details/27113385 D 字符串生成器 深搜 http://blog.csdn.net/polossk/article/details/27120395 J 状态压缩DP h

【醒目】【业界偷懒】【Public】BZOJ题目一句话题解整理

就当是复习一下自己做过的题,顺便提供一个简要题解给大家看. 做题时候实在想不出来看一下一句话题解,可以有一个提示的作用又不至于一下子知道了全部浪费了一道题吧.. 部分题目(如我A过得大部分奶牛题)是别人拿我的账号做的,不提供题解. 可能会漏掉很多做过的题..因为可能点页数不小心点错了什么的 UPD.本来想把那些没写过但是知道题解的也写了..但是写完这些已经累死了QAQ 已AC的题目(数学题均不提供分析过程,公式): 1000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树定理,

8.17题解

T1 考试之前波波老师说让我们看看凸包,然后我一看题,觉得T1是个几何题,可能是个凸包,然后就整场没怎么深入思考,实际上并没有太难 二分肯定可以想到,以二分的答案为半径,围着每个星星画个圆,如果两个圆相交了,就用并查集把它们搞在一起,最后如果上下边界属于同一个并查集证明不可行,否则可行 那我们可以想到,限制我们答案的一定是离得最近的两个点,那我们可以以两点之间的欧几里德距离为边权,还是跑最小生成树,答案是最小生成树里最大的边权的一半 1 //下边界标号0上边界标号k+1 2 #include<i

2015/8/17笔记整理 第12章 PL/SQL编程简介1 块 过程 函数

Oracle数据库中包含一种过程化编程语言PL/SQL,PL/SQL是ORACLE对标准数据库语言的扩展. 一.PL/SQL的优点 PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块.当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句. PL/SQL语句—

2018.8.17 题解 2018暑假集训之编辑距离

应该是一个很经典的题目了吧 上题面描述 概念 字符串的编辑距离,又称为Levenshtein距离,由俄罗斯的数学家Vladimir Levenshtein在1965年提出.是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数.其中,字符操作包括: 删除一个字符     a) Insert a character 插入一个字符     b) Delete a character 修改一个字符     c) Replace a character 例如对于字符串"if"和"

模拟17 题解

T1[A. 入阵曲] 60%算法 维护一下某一列的从第一行到这一行和二维前缀和 然后枚举上下左右边界,$O(n^4)$ 100%算法 省掉左右边界的枚举,改为从左向右扫一边,记录总和%k的余数,并放入桶中,可以发现,如果这个值出现过,那说明这个位置的总和减去那个位置的差(即这个区间)是k的正倍数 T2 又是个贪心.. 对于一个节点,它要被覆盖,驻扎点只有是它的第k级父亲节点时可以最优,越往上越优,因为这样覆盖的就会更广,根节点特判 实现,bfs倒序枚举每个点,up找到其父节点,并且向下标记 原文

2017年09月17日

今日日期:2017年09月17日 整理时间:17:19 天气状态:晴天 工作状态:上班 重要事项:电动车充电 家庭事项:老婆老家回来 今日总结:总体评价今天是失败的一天,无论是在金钱还是经验或者社交上面都一无所获,但是经过深思熟虑我要改变,不能做一个每日效率低下并且每天晚上回想起来都不知道今天做了什么的人,从今天做起改变,加油!你行的陈安太! 工作日程(周1-周五) 日期 时段 时间 主任务 副任务 备注 进度 周一 上午 05:00 检查微信 15263730908 × 采集数据 采集店铺 ×

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第