剩余系

Problem - I - Codeforces

题意

给定 \(H,M,A\)

\(2<=H,M<=10^9,\;0<=A<=\frac {H*M}2\)

假设一个钟表有 \(H\) 小时,一小时有 \(M\) 分钟,求一天中有多少整数分钟,满足时针、分钟夹角不超过 \(\frac {2\pi A}{HM}\)

思路

  1. 时针角速度:\(v_h=\frac {2\pi}{HM}\),分针角速度: \(v_m=\frac {2\pi}{M}\)

  2. 设 \(t\) 分钟时 \((v_m-v_h)*t\equiv \frac {2\pi A}{HM}\pmod {H*M}\)

    即 \((H-1)*t\equiv A \pmod {H*M}\), 求有多少个 \(t\) 满足 \((H-1)*t \mod ({H*M})<=A\)

  3. 在 \(ax\equiv b\pmod m\) 中,令 \(g=\gcd(a,m)\)

    则 \(x\in[0,m-1]\),在模 m 意义下 \(a*x\) 有 \(g\) 轮循环,每轮有 \(0,a,2*a...\) 等 \(\lfloor\frac mg\rfloor+1\) 种取值

  4. 因此模为 \([1,A]\) 有 \(\frac Ag\) 种取值

  5. 对称地,模为 \([H*M-A,H*M-1]\) 与 \([1,A]\) 的 \(x\) 取值的对应,也有 \(\lfloor\frac Ag\rfloor\) 个, 再假设 模为 0 恒有一个

  6. 有 \(g\) 轮循环,答案为 \(ans=(\lfloor\frac Ag\rfloor*2+1)*g\)

  7. 注意特判,当 \(A == \frac {HM}2\) 时,所有分钟都是,即有 \(H*M\) 个,但按上述算法,由于 \(A==H*M-A\) ,会多算一个

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll H, M, A;
ll gcd(ll a, ll b)
{
if (b == 0)
return a;
return gcd(b, a % b);
} ll solve()
{
if (A * 2 == H * M)
return H * M;
ll a = H - 1, m = H * M;
ll g = gcd(m, a);
ll ans = (A / g * 2 + 1) * g;
return ans;
} int main()
{
cin >> H >> M >> A;
cout << solve() << endl;
return 0;
}

2020ICPC沈阳I - Rise of Shadows的更多相关文章

  1. 2020 ICPC 沈阳站 I - Rise of Shadows 题解

    题面看这里 \(PS\):符号 \([\ \rm P\ ]\) 的意义是:当表达式 \(\rm P\) 为真则取值为 \(1\),为假则取值为 \(0\). 题目大意 给你一个一天有 \(H\)​​​ ...

  2. 2020ICPC沈阳站C题 Mean Streets of Gadgetzan

    大致题意 原题链接 翻译 \(有n个逻辑变量 请你分别对它们赋值 使其满足m个命题\) \(命题有四种格式:\) 单独数字x 表示第x个逻辑变量为真 ! + 数字x 表示第x个逻辑变量为假 若干个数字 ...

  3. Material Design系列第四篇——Defining Shadows and Clipping Views

    Defining Shadows and Clipping Views This lesson teaches you to Assign Elevation to Your Views Custom ...

  4. The Rise of Meta Learning

    The Rise of Meta Learning 2019-10-18 06:48:37 This blog is from: https://towardsdatascience.com/the- ...

  5. 2016ACM/ICPC亚洲区沈阳站-重现赛赛题

    今天做的沈阳站重现赛,自己还是太水,只做出两道签到题,另外两道看懂题意了,但是也没能做出来. 1. Thickest Burger Time Limit: 2000/1000 MS (Java/Oth ...

  6. hdu 1004 Let the Balloon Rise

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  7. Let the Balloon Rise 分类: HDU 2015-06-19 19:11 7人阅读 评论(0) 收藏

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  8. HDU 1004 Let the Balloon Rise map

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  9. HDU1004 Let the Balloon Rise(map的简单用法)

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...

  10. HD1004Let the Balloon Rise

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. junit使用进阶

    一.模拟http请求测试接口 新建一个controller @RestController public class AATestController { @GetMapping("/tes ...

  2. 图片在div中居中

    要将一张图片垂直和水平居中在一个 <div> 元素中,你可以使用以下 CSS 样式: div { display: flex; justify-content: center; align ...

  3. MYSQL --存储引擎的对比

    主要介绍三种 InnoDB .MyISAM .Memory 一.InnoDB 介绍: InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后默认的存储引擎 特点: DML操作遵循 ...

  4. PageHelper大致逻辑

    简单涉及以下几个类: PageHelper   PageMethod  PageParam PageInterceptor  implement Interceptor PageHelperAutoC ...

  5. 在k8s中使用harbor仓库

    在k8s中使用harbor仓库 修改每个node上的docker认证仓库 将每个node节点上的docker同样需要配置可信任仓库 vi /etc/docker/daemon.json #修改为 {& ...

  6. Mysql-不同场景下操作/查询数据库表

    1. 通过关联字段把一张表的字段值更新另一张表的字段值 update table_a a, table_b b set a.username = b.username where a.id = b.i ...

  7. js导出数据为excel表

    1.接口数据后端写, 2.代码如下: var params={ "filters":[ {"propertyCode":"sequenceNo&quo ...

  8. 9.java单链表初学代码复现及一些不值一提的小问题(2)

    首先写完了update和delete函数,在之前的铺垫下.倒是不难,结构和之前的都相同,遍历找到节点后处理该节点.代码如下 public void update(teamNode node){ tea ...

  9. TP开发项目时遇到的问题记录

    1.下载功能. TP自带Http下载类,使用时new一个就行,示例代码: public function download(){ //接收公文id $id = I('get.fid'); //根据公文 ...

  10. Ubuntu之docker搭建dvwa

    前提,已经安装好docker. 首先,搜索DVWA镜像,