绝对众数
题意:
在严格保证序列中有绝对众数的前提下输出这个绝对众数 定义绝对众数为序列中出现次数严格大于一半的数字
Code:
void solve() {
int n;
cin >> n;
map <int, int> mp;
for (int i = 1, x; i <= n; i++) {
cin >> x;
mp[x]++;
}
for (auto x : mp) {
if (x.second > n / 2) {
cout << x.first << '\n';
return ;
}
}
}
今年又是和平的一年
Code:
bool check (i64 l, i64 r, i64 x) {
return x >= l && x <= r;
}
void solve() {
i64 l, r;
cin >> l >> r;
i64 ans = r - l + 1;
V vc = {1, 1634, 8208, 9474};
for (int i = 0; i < 4; i++) {
if (check(l, r, vc[i])) ans--;
}
cout << ans << '\n';
}
十的倍数
Code:
i64 a[N][N];
struct node {
i64 cnt2, cnt5;
} dp[N][N];
void solve() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
dp[i][j] = {inf, inf};
}
}
auto get2 = [&] (i64 x) -> int {
int res = 0;
for (res = 0; x % 2 == 0; res++, x /= 2);
return res;
} ;
auto get5 = [&] (i64 x) -> int {
int res = 0;
for (res = 0; x % 5 == 0; res++, x /= 5);
return res;
} ;
dp[1][1] = {get2(a[1][1]), get5(a[1][1])};
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (!a[i][j]) continue;
if (i > 1) {
dp[i][j].cnt2 = min(dp[i - 1][j].cnt2 + get2(a[i][j]), dp[i][j].cnt2);
dp[i][j].cnt5 = min(dp[i - 1][j].cnt5 + get5(a[i][j]), dp[i][j].cnt5);
}
if (j > 1) {
dp[i][j].cnt2 = min(dp[i][j - 1].cnt2 + get2(a[i][j]), dp[i][j].cnt2);
dp[i][j].cnt5 = min(dp[i][j - 1].cnt5 + get5(a[i][j]), dp[i][j].cnt5);
}
}
}
cout << min({dp[n][n].cnt2, dp[n][n].cnt5});
}
又见斐波那契
Code:
void solve() {
V vc = {1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040};
int n;
cin >> n;
V Q(n);
for (int i = 0; i < n; i++) {
cin >> Q[i];
}
V dp(int(1e6 + 5), 0);
dp[0] = 1;
for (int i = 0; i < vc.size(); i++) {
for (int j = int(1e6); j >= vc[i]; j--) {
dp[j] += dp[j - vc[i]];
}
}
for (int i = 0; i < n; i++) {
cout << dp[Q[i]] << '\n';
}
}
两个老哥