赞
踩
整理的算法模板合集: ACM模板
实际上是一个全新的精炼模板整合计划
好耶,好多人 AK 诶
究极上分场
下午有事题解更晚了…
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 a−p % 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(); } }
Problem
给你一副 n n n 张的扑克牌,你想要重排它。
输入长度为 n n n 的数组 p p p,编号为 1 ∼ n 1\sim n 1∼n 的扑克牌,第 i i i 张权值为 p i p_i pi,且 p i p_i pi 不会重复。扑克牌按照编号顺序从底向上放,也就是 p 1 p_1 p
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。