当前位置:   article > 正文

Codeforces Round #704 (Div. 2)(A ~ E)5题全 超高质量题解【每日亿题2 / 23】_codeforeces round #754

codeforeces round #754

整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


好耶,好多人 AK 诶
究极上分场
下午有事题解更晚了…

A、Three swimmers

Problem

三个人游泳,第一个人游一圈花费 a a a ,第二个人 b b b ,第三个人 c c c ,他们会一圈一圈地游,即第一个人在 0 , a , 2 a , 3 a ⋯ 0,a,2a,3a\cdots 0,a,2a,3a 的时间在左边,第二第三个同理。

你在时间 p p p 到达游泳池左边,问见到第一个人你需要等待的时间是多少?

Solution

签到题 ~

首先如果 a  OR  b  OR  c a \ \text{OR}\ b \ \text{OR}\ c a OR b OR c p p p 的约数,那么我一到游泳池就能见到一位,等待的时间为 0 0 0

否则我就需要等他们游过来,也就是 p p p 时刻对于第一个人来说,已经游了 p   %   a p\ \%\ a p % a 的时间,因为 % 运算就是得到余数,实际意义就是 a a a 的倍数离 p p p 差多少,所以还需要再等 a − p   %   a a-p\ \%\ a ap % a 的时间。三个人取最小值即可。

Code

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;
typedef long long ll;
typedef int itn;
const int N = 2e4 + 7;
const ll INF = 4e18;

int n, m, t;
ll a, b, c, p;

void solve()
{
   
    scanf("%lld%lld%lld%lld", &p, &a, &b, &c);
    if(p % a == 0 || p % b == 0 || p % c == 0)  {
   
        puts("0");
    }
    else {
   
        ll ans = INF;
        ans = min({
   a - p % a, b - p % b, c - p % c});
        printf("%lld\n", ans);

    }
}

int main()
{
   
    scanf("%d", &t);
    while(t -- ) {
   
        solve();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

B、Card Deck

Problem

给你一副 n n n 张的扑克牌,你想要重排它。

输入长度为 n n n 的数组 p p p,编号为 1 ∼ n 1\sim n 1n 的扑克牌,第 i i i 张权值为 p i p_i pi,且 p i p_i pi 不会重复。扑克牌按照编号顺序从底向上放,也就是 p 1 p_1 p

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/54913?site
推荐阅读
相关标签
  

闽ICP备14008679号