A. Love Triangle
#include <bits/stdc++.h>
using namespace std;
vector<int> v(5010);
int n;
int main(void) {
ios::sync_with_stdio(false);cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("input.txt", "rt", stdin);
#endif
cin >> n;
for(int i = 1; i <= n; ++i) cin >> v[i];
for(int i = 1; i <= n; ++i) {
int a = i;
int b = v[a];
int c = v[b];
int d = v[c];
if(a == d) cout << "YES" << endl, exit(0);
}
cout << "NO" << endl;
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
B. Hamster Farm
- 给你松鼠的数量和 盒子的种类、及每种盒子的容量,问你选哪种盒子多少个使得剩余松鼠最少(盒子必须装满,装不满放弃)
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull n, k, v;
ull ans1, ans2;
ull mi = (ull)1e18 + 10;
int main(void) {
ios::sync_with_stdio(false);cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("input.txt", "rt", stdin);
#endif
cin >> n >> k;
for(ull i = 1; i <= k; i++) {
cin >> v;
ull temp = n % v;
if(temp < mi) {
ans1 = i;
ans2 = n / v;
mi = temp;
}
}
cout << ans1 <<" " << ans2 << endl;
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
C. Convenient For Everybody
- 描述 略
- 题目给的标签是binary search、two pointers. 反正我没用到二分。
- 用类似维护区间和的做法使复杂度达到O (n) ,注意一下边界和多解情况要求输出最小值(没注意wa两次)
- -
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int s, f, d;
int ans = 0x3f3f3f3f;
const int maxn = (int)2e5 + 10;
vector<ll> v(maxn), dp(maxn);
int main(void) {
ios::sync_with_stdio(false);cin.tie(0);
#ifdef LOCAL_DEFINE
freopen("input.txt", "rt", stdin);
#endif
cin >> n;
for(int i = 1; i <= n; i++) cin >> v[i];
for(int i = n + 1; i <= 2 * n; i++) v[i] = v[i - n];
cin >> s >> f;
d = f - s;
for(int i = n + 1; i > n + 1 - d; i--) dp[1] += v[i];
for(int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + v[i + n] - v[i + n - d];
}
int id = *max_element(dp.begin() + 1, dp.begin() + 1 + n);
for(int i = 1; i <= n; ++i) {
if(dp[i] != id) continue;
int st = (i + n) - d + 1;
if(st > n) st -= n;
if(st == 1) ans = min(ans, s);
else {
int dis = st - 1;
int temp = s + n - dis;
if(temp > n) temp -= n;
ans = min(ans, temp);
}
}
cout << ans << endl;
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}