《如 何 速 通 一 套 题》4.0

A sprial

找规律。

Celes1

直接做。

#include <bits/stdc++.h>
#define int long long
using namespace std;
int t, n;
int sqrtll(int n) {
int l = 1, r = 1000000, ans = 0;
for(; l <= r; ) {
int mid = (l + r) >> 1;
if(mid * mid >= n) {
ans = mid, r = mid - 1;
}else {
l = mid + 1;
}
}
return ans;
}
signed main() {
freopen("spiral.in", "r", stdin);
freopen("spiral.out", "w", stdout);
for(cin >> t; t--; ) {
cin >> n;
int i = sqrtll(n);
int tmp = n - (i - 1) * (i - 1);
if((i & 1)) {
if(tmp <= i) {
cout << i << ' ' << tmp << '\n';
}else {
cout << 2 * i - tmp << ' ' << i << '\n';
}
}else {
if(tmp <= i) {
cout << tmp << ' ' << i << '\n';
}else {
cout << i << ' ' << 2 * i - tmp << '\n';
}
}
}
return 0;
}

B write

C curve

x3x2x2

x3rl+1+i=lrai3ri+1x2rl+1+i=lrai2ri+1x2rl+1+i=lrai2ri+1

ai,x109

当 ri+130log2109,x3ri+10,x2ri+10,

x2ri+10

直接暴力。

#include <bits/stdc++.h>
using namespace std;
int n, arr[200020], q, x, l, r;
int main() {
freopen("curve.in", "r", stdin);
freopen("curve.out", "w", stdout);
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> arr[i];
}
for(cin >> q; q--; ) {
cin >> x >> l >> r;
l = max(l, r - 50);
for(int i = l; i <= r; i++) {
x = (x + arr[i]) / 2;
}
cout << x << '\n';
}
return 0;
}

D coin

乱搞

我们充分发挥人类智慧,根据数学直觉,不能凑出的数必然在 2.69×107 以上。

直接对于 2.69×107 下面的数暴力 dp,上面的都凑的出来。

/**
* @brief "According" to my direst sence,
* @brief the maximum number which "will output -1" is not greater than 2.69*(10^7).
*/
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int kCstf = 2.69e7;
int n, l, arr[22], dp[kCstf + 20];
signed main() {
freopen("coin.in", "r", stdin);
freopen("coin.out", "w", stdout);
cin >> n >> l;
for(int i = 1; i <= n; i++) {
cin >> arr[i];
}
if(l <= kCstf) {
dp[0] = 1;
for(int i = 1; i <= n; i++) {
for(int j = arr[i]; j <= l; j++) {
dp[j] |= dp[j - arr[i]];
}
}
int ans = 0;
for(int i = 1; i <= l; i++) {
ans += dp[i];
}
cout << ans << '\n';
}else {
dp[0] = 1;
for(int i = 1; i <= n; i++) {
for(int j = arr[i]; j <= kCstf; j++) {
dp[j] |= dp[j - arr[i]];
}
}
int ans = 0;
for(int i = 1; i <= kCstf; i++) {
ans += dp[i];
}
cout << ans + (l - kCstf) << '\n';
}
return 0;
}
正解

同余最短路,模数是最大值。

posted @   hhc0001  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示