假装自己复活辣。

7.10

CF 689 D Friends and Subsequences

二分。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 typedef long long LL;
 6 const int maxn = 2e5 + 10;
 7 int n, a[maxn], b[maxn];
 8
 9 // RMQ
10 int M[maxn][20], m[maxn][20];
11 void init()
12 {
13     for(int i = 1; i <= n; i++) M[i][0] = a[i];
14     for(int j = 1; (1 << j) <= n; j++)
15         for(int i = 1; i + ( 1 << j ) - 1 <= n; i++)
16             M[i][j] = max(M[i][j-1] , M[i+(1<<j-1)][j-1]);
17
18     for(int i = 1; i <= n; i++) m[i][0] = b[i];
19     for(int j = 1; (1 << j) <= n; j++)
20         for(int i = 1; i + ( 1 << j ) - 1 <= n; i++)
21             m[i][j] = min(m[i][j-1] , m[i+(1<<j-1)][j-1]);
22 }
23
24 int M_query(int l, int r)
25 {
26     int k = 0;
27     while( ( 1 << (k + 1) ) <= r - l + 1 ) k++;
28     return max(M[l][k], M[r-(1<<k)+1][k]);
29 }
30
31 int m_query(int l, int r)
32 {
33     int k = 0;
34     while( ( 1 << (k + 1) ) <= r - l + 1 ) k++;
35     return min(m[l][k], m[r-(1<<k)+1][k]);
36 }
37
38 int main(void)
39 {
40     scanf("%d", &n);
41     for(int i = 1; i <= n; i++) scanf("%d", a + i);
42     for(int i = 1; i <= n; i++) scanf("%d", b + i);
43     init();
44
45     LL ans = 0LL;
46     for(int l = 1; l <= n; l++)
47     {
48         int t1, t2;
49         int L = l, R = n, mid;
50
51         if(M_query(l, n) < m_query(l, n)) R = n + 1;
52         else while(L < R)
53         {
54             mid = L + (R - L) / 2;
55             if(M_query(l, mid) < m_query(l, mid)) L = mid + 1;
56             else R = mid;
57         }
58         t1 = R;
59
60         L = l, R = n;
61         if(M_query(l, n) - 1 < m_query(l, n)) R = n + 1;
62         else while(L < R)
63         {
64             mid = L + (R - L) / 2;
65             if(M_query(l, mid) - 1 < m_query(l, mid)) L = mid + 1;
66             else R = mid;
67         }
68         t2 = R;
69
70         ans = ans + t2 - t1;
71     }
72
73     printf("%I64d\n", ans);
74
75     return 0;
76 }

Aguin

7.12

HDU 5514 Frogs

因为每只步长为a[i]的青WA能踩到所有gcd(a[i], m)的倍数石头。

问题转化为给n个数,求能被这n个数中至少一个整除的数之和。

能被一个数整除的所有数之和是一个等差数列 容易计算,但是被多个数整除的数会重, 所以容斥一下。

因为所有gcd都是m的因子,先枚举m的所有因子,容易证明1e9内因子数目不会很多的。

比如 2^2 * 3^2 * 5 * 7 * 11 * 13 * 17 * 19 = 58198140,也就3^2 * 2^6 = 576个因子。

容斥的过程是 求 sigma能被一个gcd整除的数 - sigma能被两个gcd整除的数 +sigma能被三个gcd整除的数 ……

对于每个因子 算它的贡献的时候 它的所有倍数的贡献都被算过了 所以给倍数减去贡献就好了 负贡献也一样。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 typedef long long LL;
 7 const int maxn = 1e4 + 10;
 8 int a[maxn], f[maxn], c[maxn];
 9
10 int gcd(int a, int b)
11 {
12     return a % b ? gcd(b, a % b) : b;
13 }
14
15 int main(void)
16 {
17     int T;
18     scanf("%d", &T);
19     for(int kase = 1; kase <= T; kase++)
20     {
21         int n, m;
22         scanf("%d %d", &n, &m);
23         for(int i = 1; i <= n; i++) scanf("%d", a + i);
24
25         memset(f, 0, sizeof(f));
26         for(int i = 1; i * i <= m; i++)
27         {
28             if(m % i == 0)
29             {
30                 f[++f[0]] = i;
31                 if(i * i != m) f[++f[0]] = m / i;
32             }
33         }
34         sort(f + 1, f + 1 + f[0]);
35
36         memset(c, 0, sizeof(c));
37         for(int i = 1; i <= n; i++)
38         {
39             int x = gcd(a[i], m);
40             for(int j = 1; j <= f[0]; j++)
41                 if(f[j] % x == 0) c[j] = 1;
42         }
43
44         LL ans = 0LL;
45         for(int i = 1; i < f[0]; i++)
46         {
47             ans = ans + (LL) (m - 1) / f[i] * ((m - 1) / f[i] + 1) * f[i] / 2 * c[i];
48             for(int j = i + 1; j <= f[0]; j++)
49                 if(f[j] % f[i] == 0) c[j] -= c[i];
50         }
51
52         printf("Case #%d: %I64d\n", kase, ans);
53     }
54     return 0;
55 }

Aguin

7.13

HDU 5515 Game of Flying Circus

嘻嘻嘻

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5
 6 int main(void)
 7 {
 8     int t;
 9     scanf("%d", &t);
10     for(int kase = 1; kase <= t; kase++)
11     {
12         double T, V1, V2;
13         scanf("%lf %lf %lf", &T, &V1, &V2);
14         printf("Case #%d: ", kase);
15         if(V1 == 0) puts("No");
16         else if(V1 >= V2) puts("Yes");
17         else if(V1 * sqrt(2) > V2)
18         {
19             double tmp = V1 / V2 * V1 / V2;
20             double a = tmp - 1, b = 600 * tmp, c = a * 90000;
21             double x = (- b + sqrt(b * b - 4 * a * c)) / 2 / a;
22             if((x + 600) / V1 < T + (600 - x) / V2) puts("Yes");
23             else puts("No");
24         }
25         else if(V1 * 3 > V2)
26         {
27             double tmp = V2 / V1 * V2 / V1;
28             double a = tmp - 1, b = 1800, c = tmp * 90000 - 810000;
29             double x = (- b + sqrt(b * b - 4 * a * c)) / 2 / a;
30             if((sqrt((300 - x) * (300 - x) + 90000) + 900) / V1 < T + (300 + x) / V2) puts("Yes");
31             else puts("No");
32         }
33         else puts("No");
34     }
35     return 0;
36 }

Aguin

HDU 5478 Can you find it

嘿嘿嘿

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 typedef long long LL;
 5
 6 LL qpow(LL a, LL b, LL mod)
 7 {
 8     LL ret = 1LL;
 9     while(b)
10     {
11         if(b & 1) ret = ret * a % mod;
12         a = a * a % mod;
13         b >>= 1;
14     }
15     return ret;
16 }
17
18 int main(void)
19 {
20     int kase = 0;
21     int C, k1, b1, k2;
22     while(~scanf("%d %d %d %d", &C, &k1, &b1, &k2))
23     {
24         printf("Case #%d:\n", ++kase);
25         int ok = 0;
26         for(int a = 1; a < C; a++)
27         {
28             int b = C - qpow(a, k1 + b1, C);
29             if(qpow(a, k1, C) == qpow(b, k2, C))
30             {
31                 ok = 1;
32                 printf("%d %d\n", a, b);
33             }
34         }
35         if(!ok) puts("-1");
36     }
37     return 0;
38 }

Aguin

7.14

HDU 5534 Partial Tree

高老师太神拉。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 int f[2222], dp[2222];
 6
 7 int main(void)
 8 {
 9     int T;
10     scanf("%d", &T);
11     while(T--)
12     {
13         int n;
14         scanf("%d", &n);
15         for(int i = 1; i < n; i++) scanf("%d", f + i);
16         for(int i = 2; i < n; i++)
17         {
18             dp[i] = f[i] + (i - 2) * f[1];
19             for(int j = 2; j <= i - j + 1; j++)
20                 dp[i] = max(dp[i], dp[j] + dp[i-j+1]);
21         }
22         printf("%d\n", dp[n-1] + 2 * f[1]);
23     }
24     return 0;
25 }

Aguin

HDU 5492 Find a path

The magic values are no greater than 30.

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int G[31][31], dp[31][31][1801];
 5
 6 int main(void)
 7 {
 8     int T;
 9     scanf("%d", &T);
10     for(int kase = 1; kase <= T; kase++)
11     {
12         int N, M;
13         scanf("%d %d", &N, &M);
14         for(int i = 1; i <= N; i++)
15             for(int j = 1; j <= M; j++)
16                 scanf("%d", &G[i][j]);
17
18         for(int i = 0; i <= N; i++)
19             for(int j = 0; j <= M; j++)
20                 for(int k = 0; k <= 1800; k++)
21                     dp[i][j][k] = 1e9;
22
23         dp[1][1][G[1][1]] = 0;
24         for(int i = 1; i <= N; i++)
25         {
26             for(int j = 1; j <= M; j++)
27             {
28                 if(i == 1 && j == 1) continue;
29                 for(int k = 0; k <= 1800; k++)
30                 {
31                     if(dp[i-1][j][k] != 1e9) dp[i][j][k+G[i][j]] = min(dp[i][j][k+G[i][j]], ((dp[i-1][j][k] + k * k) / (i + j - 2) + G[i][j] * G[i][j]) * (i + j - 1) - (k + G[i][j]) * (k + G[i][j]));
32                     if(dp[i][j-1][k] != 1e9) dp[i][j][k+G[i][j]] = min(dp[i][j][k+G[i][j]], ((dp[i][j-1][k] + k * k) / (i + j - 2) + G[i][j] * G[i][j]) * (i + j - 1) - (k + G[i][j]) * (k + G[i][j]));
33                 }
34             }
35         }
36
37         int ans = 1e9;
38         for(int i = 0; i <= 1800; i++) ans = min(ans, dp[N][M][i]);
39         printf("Case #%d: %d\n", kase, ans);
40
41     }
42     return 0;
43 }

Aguin

转载于:https://www.cnblogs.com/Aguin/p/5657861.html

第一周 7.10-7.16相关推荐

  1. TinyOS 学习第一周-Ubuntu-10.10下安装TinyOS-2.1.1

    1           Ubuntu-10.10下安装TinyOS-2.1.1 1背景:TinyOS主要有三种运行环境: <1> Windows环境: 虚拟机(Oracle VM Visu ...

  2. 【微语】第一周(2020.11.16~11.22)

    11.16.时光,浓淡相宜,人心,远近相安.流年,长短皆逝.浮生,往来皆客.早安,打工人! 11.17.最艰难的时候,别老想着太远的将来,只要鼓励自己熬过今天就好. 11.18.如果没有躺赢的命,那就 ...

  3. 分享Silverlight/WPF/Windows Phone一周学习导读(10月16日-10月22日)

    分享Silverlight/WPF/Windows Phone一周学习导读(10月16日-10月22日) 本周Silverlight学习资源更新 Silverlight:分包下载及SEO优化方案 菩提 ...

  4. 输出结果为16的python表达式_第一周作业(rayco)

    rayco 第一周作业 第一次-课后习题 a = 10 b = 3 c = a/b-a print(c, type(c)) c = a/b*a print(c, type(c)) c = 0.1*a/ ...

  5. 一周第一次课(10月16日)安装linux

    学习之初: 学习课程的目的什么  (提升自己拿高薪) 学习完课程做什么职位(系统运维) 学习完课程在哪个城市发展(郑州) 1给自己设定目标: 何时学完:(10月16日到2月16日) 何时跳槽 第一份薪 ...

  6. j1900电脑装linux,一周第一次课(10月16日)安装linux

    学习之初: 学习课程的目的什么  (提升自己拿高薪) 学习完课程做什么职位(系统运维) 学习完课程在哪个城市发展(郑州) 1给自己设定目标: 何时学完:(10月16日到2月16日) 何时跳槽 第一份薪 ...

  7. 获取第某一周的第一天和最后一天_减肥方法一周瘦10斤吃什么菜

    减肥一直是一个非常热门的话题,很多朋友为了减肥都绞尽脑汁,其实养生知识网分享了很多减肥好方法,有需要的朋友可以搜一搜.在减肥的过程中,大部分都想知道快速减肥的方法,那么,减肥方法一周瘦10斤吃什么菜呢 ...

  8. 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  9. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  10. 计算机图形学多边形填充代码_计算机图形学 Computer Graphics (第一周笔记及课件翻译)...

    本文使用 Zhihu On VSCode 创作并发布 注:本文部分内容源自于UDE课程 Computer Graphics(Prof. Dr. Jens Krüger),仅供本人自己学习与作为课程笔记 ...

最新文章

  1. UILable文字不居中问题
  2. spring 学习—spring的相关概念(01)
  3. JVM实战与原理---内存回收策略
  4. python3随笔-协方差,标准差,方差
  5. CDMA的完整形式是什么?
  6. 【原理】解析一致性哈希算法
  7. sql左右连接的区别
  8. Markdown_合并表格中的单元格
  9. RPC和Message Passing比较
  10. matlab波导色散,有效折射率法求矩形波导色散曲线(附Matlab程序)
  11. 误差的基本性质与处理matlab实验,误差理论与数据处理实验报告
  12. oracle导入dmp报20000,imp导入dmp文件报:IMP-00038: 无法转换为环境字符集句柄IMP-00000: 未成功终止导入...
  13. 刘毅5000词汇_不熟词汇整理_lesson_2 and part_4
  14. 企业股权价值评估:市场法及收益法的评估思路
  15. python 海龟图
  16. mybatis学习1
  17. 宁静以致远——浅析《临江仙.滚滚长江东逝水》
  18. jQuery的绑定与解绑方法
  19. 一场胆战心惊的B站面试,哔哩哔哩也太难进了
  20. 解决office软件无法打印预览 / 添加打印机失败问题

热门文章

  1. SQL Server2005的XML数据类型之基础篇 (4)
  2. Python如何提取docx中的超链接
  3. 21最难调剂年:150万人参加调剂,预扩招18万人!
  4. 【从 0 开始机器学习】手把手用 Python 实现梯度下降法!
  5. 机器学习算法基础3-sklearn数据集与估计器
  6. matplotlib常见问题解决方法
  7. 每周荐书:云原生、Docker、Web算法(评论送书)
  8. 网站的前期策划准备工作
  9. 无意中最大的收获:《构建高性能Web站点》
  10. 一文详解Python中的*可变参数与**关键字参数