赞
踩
问题简要描述:
三个人在泳池游一个来回分别需要的时间为a,b,c;
在时间p时到泳池的出发点,至少等多久一个人游到出发点。
输入输出:

直接计算,代码如下:
#include<iostream> using namespace std; long long min(long long a, long long b, long long c) { long long r = a; if (b < r) r = b; if (c < r) r = c; return r; } int main() { int n; cin >> n; long long p, a, b, c, ar, br, cr, res; for (int i = 0; i < n; ++i) { cin >> p >> a >> b >> c; if (p % a == 0 || p % b == 0 || p % c == 0) { cout << 0 << endl; continue; } ar = (p / a + 1) * a - p; br = (p / b + 1) * b - p; cr = (p / c + 1) * c - p; res = min(ar, br, cr); cout << res << endl; } }
贴一个大佬的题解学习:
#include <bits/stdc++.h> #define int long long using namespace std; void solve() { int a, b, c, p; cin >> p >> a >> b >> c; cout << min({(a - p % a) % a, (b - p % b) % b, (c - p % c) % c}) << endl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int q = 1; cin >> q; while (q--) solve(); return 0; }
问题简要描述:
一叠卡片,n张,每张值在1到p,想要重新排序,使得表达式的值最大
i的顺序由堆底到堆顶。
每次步骤,从牌顶取k张卡片,放到另一堆中(初始为空堆),直到原来的牌堆为空。输出最大排法。输入输出如下:



没做出来,贴上大神代码
#ifdef DEBUG #define _GLIBCXX_DEBUG #endif //#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; typedef long double ld; typedef long long ll; const int maxN = 1e5 + 10; int p[maxN]; int n; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); // freopen("input.txt", "r", stdin); int tst; cin >> tst; while (tst--) { vector<int> ps; int mx = 0; cin >> n; for (int i = 1; i <= n; i++) { cin >> p[i]; mx = max(mx, p[i]); if (mx == p[i]) { ps.emplace_back(i); } } ps.emplace_back(n + 1); for (int i = ps.size() - 2; i >= 0; i--) { int from = ps[i]; int to = ps[i + 1] - 1; for (int x = from; x <= to; x++) cout << p[x] << " "; } cout << '\n'; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。