T1 基于1的算术

标签

暴力枚举

思路1

赛时想了个假的 DP,只拿了 77 分,,,

小于 \(10^{15}\) 的仅由 \(1\) 组成的数只有 \(15\) 个,直接枚举即可。

想了一个做法,就是直接枚举第 \(i\) 位作为最高位的 \(1\) 串取了几个,分解每位,设从高到低 \(i\) 位为 \(a_i\),\(a_i - 3\sim a_i + 3\) 全部枚举即可,加个剪枝,就是答案大于当前答案时退出,然后改变一下枚举顺序即可,跑的飞快。

代码

好像这份代码多枚举几种反而更快,只枚举 \([-2, +2]\) 的不仅会 WA 还会 TLE。玄学复杂度。

code
void dfs(ll i, ll f, ll tot, ll res) {
if (f >= ans)
return;
if (i == 1)
return cmin(ans, abs(a[1] + tot + res) + f); a[i] = a[i] + res + tot;
ll t; t = -a[i];
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); t = -a[i] - 1;
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); t = -a[i] + 1;
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); t = -a[i] - 2;
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); t = -a[i] + 2;
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); t = -a[i] - 3;
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); t = -a[i] + 3;
dfs(i - 1, f + abs(t) * i, tot + t, (t + a[i]) * 10); a[i] = a[i] - res - tot;
}

思路二

题解里说,从高到低枚举,每位只会取当前的 \(\lfloor\frac{n}{x_i}\rfloor\) 或 \(\lfloor\frac{n}{x_i}\rfloor + 1\),其中 \(x_i\) 是长为 \(1\) 的全 \(1\) 串。复杂度 \(O(2^{\lg n})\)。

代码

code
ll n, x[20], ans;

void dfs(int i, ll n, ll res) {
if(res >= ans) return;
if(i == 1) return cmin(ans, res + abs(n));
dfs(i - 1, n % x[i], res + abs (n / x[i]) * i);
if(n % x[i] == 0) return;
dfs(i - 1, x[i] - n % x[i], res + (abs (n / x[i]) + 1) * i);
} int main() {
freopen("add.in", "r", stdin);
freopen("add.out", "w", stdout);
rd(n); ans = n;
rep(i, 1, 16) x[i] = x[i - 1] * 10 + 1;
dfs(16, n, 0);
printf("%lld\n", ans);
return 0;
}

T2 逃离

标签

二分,贪心

思路

二分结束时间,对每辆车特殊设置终点,即 \(t\) 时必须给后面的车留足空位。

小数二分,别忘了加 \(eps\)。

代码

好写,就是卡了下精度。

code
bool _st;

ci N = 3e5 + 9;
const db INF = 1e18;
constexpr db eps = 1e-7; struct car {
ll l, r, v;
void input() { rd(l, r, v); }
bool operator<(const car &rhs) { return l < rhs.l; }
} c[N]; int n, m, k;
ll t;
ll sum[N]; bool _ed; int check(db dl) {
ll tot = 0;
rep(i, 1, n) {
db nv = (t + sum[i - 1] - c[i].l) / dl;
if (nv <= c[i].v)
continue;
tot = tot + ceil((nv - c[i].v) / k);
}
return tot <= m;
} int main() {
// cerr << -(&_ed - &_st) / 1048576.0 << "MB" << endl;
freopen("car.in", "r", stdin);
freopen("car.out", "w", stdout);
rd(n, t, m, k);
rep(i, 1, n) c[i].input();
sort(c + 1, c + n + 1);
rep(i, 1, n) sum[i] = sum[i - 1] + (c[i].r - c[i].l);
db L = 0, R = INF;
while ((R - L) > eps) {
db mid = (L + R) / 2;
if (check(mid))
R = mid;
else
L = mid + eps * 10;
}
printf("%.3lf\n", L);
return 0;
}

另一种做法

考虑加速器已经确定,总时间是 \(\frac{\text{每辆车后面的车的总长加上原终点距车尾的距离 = x_i}}{\text{车速 = v_i}}\) 的最大值。

考虑总时间由最大值贡献,且 \(x_i\) 不变,贪心每次取最大时间的车给加速器,优先队列维护即可。

T3 南斯拉夫

标签

小清新

构造

乱搞

思路

好像其他人有些乱搞的过了,SPJ 也出了好几次锅,后来我提供了一个 SPJ,发现如果读入的是无法识别(非可操作种类)则不会修改,然后就 AC 了,,,貌似这题很容易出解,随便搞个情况就好了。

我是转换思路,首先可以对有解的情况构造方案使其永远在 \(\{0, 1\}\) 中改变,相当于异或,每条边即令其一个端点的点值异或 \(1\)。

这样不太好搞,考虑相异转相同。对每条边,选择任意一个端点(代码中选的是较小的)将点权异或上 \(1\),对每条边的操作就变成了不变或将两个端点同时异或上 \(1\),因为异或和不变,若一个连通块内异或和不为 \(0\) 则无解,发现等价于边数为奇数。

然后对每一个连通块考虑,因为异或的可消除性,这个连通块内必有偶数个黑点(即点权不为 \(0\) 的点),任选两个黑点,考虑选取任一路径上的所有边,将是否操作的状态反转,这个可以求任一生成树,树上差分即可。

代码

代码难度不高。

code
ci N = 1e6 + 9;

int T;
int n, m;
int l[N], r[N], id[N], lz[N], x[N], swp[N];
vector<int> A[N]; int pa[N], sz[N];
int find(int i) { return pa[i] == i ? i : pa[i] = find(pa[i]); }
void init() {
rd(T, n, m);
rep(i, 1, n) pa[i] = i;
rep(i, 1, m) {
int u, v;
rd(u);
rd(v);
l[i] = u;
r[i] = v;
if (find(u) == find(v)) {
++sz[find(u)];
} else {
sz[find(v)] += sz[find(u)];
pa[find(u)] = find(v);
++sz[find(v)];
}
}
rep(i, 1, n) {
if (find(i) == i) {
if (sz[i] % 2 != 0) {
puts("Yugoslavia is unstable!");
exit(0);
}
}
}
} queue<int> q; int vis[N];
vector<int> B[N]; void dfs(int u, int la) {
if (x[u] == 1)
q.push(u);
vis[u] = 1;
for (int i : A[u]) {
int v = l[i] ^ r[i] ^ u;
if (v == la || vis[v])
continue;
dfs(v, u);
B[u].eb(i);
}
} void dfs1(int u) {
for (int i : B[u]) {
int v = l[i] ^ r[i] ^ u;
dfs1(v);
swp[i] = lz[v];
lz[u] ^= lz[v];
}
} bool _ed; int ret[N]; int main() {
// cerr << -(&_ed - &_st) / 1048576.0 << "MB" << endl;
freopen("yugo.in", "r", stdin);
freopen("yugo.out", "w", stdout);
init(); rep(i, 1, m) {
x[l[i]] ^= 1;
A[l[i]].eb(i);
A[r[i]].eb(i);
}
rep(i, 1, n) {
if (find(i) == i) {
dfs(i, 0);
while (q.size()) {
lz[q.front()] ^= 1;
q.pop();
lz[q.front()] ^= 1;
q.pop();
}
dfs1(i);
}
} rep(i, 1, n) x[i] = 0; rep(i, 1, m) {
if (swp[i] == 0) {
// l[i]
if (x[l[i]]) {
printf("3 ");
--ret[l[i]];
} else {
printf("1 ");
++ret[l[i]];
}
x[l[i]] ^= 1;
} else {
// r[i]
if (x[r[i]]) {
printf("4 ");
--ret[r[i]];
} else {
printf("2 ");
++ret[r[i]];
}
x[r[i]] ^= 1;
}
} // puts(""); rep(i, 1, n) printf("%d ", ret[i]);
return 0;
}

T4 数数

标签

喵喵题

Hash 表

高中数学-换元

思路

T4 出这种题?有点奇怪,,,但是妙妙题。

首先看这个式子,发现可以换元。

\(a_i^2 + a_i + a_j^2\equiv a_i\times a_j\pmod p\)

令 \(x = a_i + 1, y = a_j\)

\((x - 1)^2 + x - 1 + y^2\equiv (x - 1)\times y\pmod p\)

\(x^2 - x + y^2 - xy + y\equiv 0\pmod p\)

\(x^2 - xy + y^2 \equiv x - y\pmod p\)

两边同乘 \(x + y\)(啊这)。

得到 \(x^3 + y^3\equiv x^2 - y^2\pmod p\)

即 \(x^3 - x^2 \equiv - y^3 - y^2\pmod p\)

然后拿 \(map\) 什么的维护一下即可。

我就知道,,,

代码

code
ci N = 5e5 + 9;

int n, p;
ll ans;
ll x[N], y[N];
int a[N], b[N]; map<int, int> H; int inmod(int x) {
x %= p;
return x < 0 ? x + p : x;
} int main() {
// freopen("count.in", "r", stdin);
// freopen("count.out", "w", stdout);
rd(n, p);
rep(i, 1, n) rd(y[i]), y[i] %= p;
rep(i, 1, n) {
x[i] = (y[i] + 1) % p;
a[i] = inmod(x[i] * x[i] % p * x[i] % p - x[i] * x[i] % p);
b[i] = inmod(- y[i] * y[i] % p * y[i] % p - y[i] * y[i] % p);
if(a[i] == b[i]) -- ans;
++ H[b[i]];
}
rep(i, 1, n) {
if(H.find(a[i]) != H.end()) {
ans += H[a[i]];
}
}
printf("%lld\n", ans);
return 0;
}

2023/11/16 NOIP 模拟赛的更多相关文章

  1. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  2. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  3. 11.7 NOIP模拟赛

    目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...

  4. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  5. 【2019.7.16 NOIP模拟赛 T2】折叠(fold)(动态规划)

    暴力\(DP\) 考虑暴力\(DP\),我们设\(f_{i,j}\)表示当前覆盖长度为\(i\),上一次折叠长度为\(j\)的方案数. 转移时需要再枚举这次的折叠长度\(k\)(\(k\ge j\)) ...

  6. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)

    找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...

  7. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  8. NOIP模拟赛-2018.11.6

    NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...

  9. NOIP模拟赛-2018.11.5

    NOIP模拟赛 好像最近每天都会有模拟赛了.今天从高二逃考试跑到高一机房,然而高一也要考试,这回好像没有拒绝的理由了. 今天的模拟赛好像很有技术含量的感觉. T1:xgy断句. 好诡异的题目,首先给出 ...

  10. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

随机推荐

  1. JS--正则表达式--手稿

  2. 重磅来袭!MoneyPrinterPlus一键发布短视频到视频号,抖音,快手,小红书上线了

    MoneyPrinterPlus开源有一段时间了,已经实现了批量短视频混剪,一键生成短视频等功能. 有些小伙伴说了,我批量生成的短视频能不能一键上传到视频号,抖音,快手,小红书这些视频平台呢?答案是必 ...

  3. 2 - 【RocketMQ 系列】CentOS 7.6 安装部署RocketMQ

    二.开始安装部署RocketMQ 官方网站:https://rocketmq.apache.org/ 各版本要求: 1.版本选取 下载地址: https://github.com/apache/roc ...

  4. [oeasy]python0048_注释_comment_设置默认编码格式

    注释Comment 回忆上次内容 使用了版本控制 git 制作备份 进行回滚   尝试了 嵌套的控制结构 层层 控制   不过 除非 到不得以 尽量不要 太多层次的嵌套   这样 从顶到底 含义 明确 ...

  5. oeasy教您玩转vim - 88 - # 自动命令autocmd

    ​ 自动命令 autocommand 回忆 上次我们研究的是外部命令grep 可以在vim中使用grep 搜索的结果进入了列表 可以打开.遍历.跳转.关闭这个列表 也可以给列表中的匹配行或者每个文件执 ...

  6. oeasy教您玩转vim - 76 - # 组合键映射map

    ​ 会话session 回忆组合键映射的细节 上次我们定义了一系列的复合键 主要是和ctrl键一起 快速跳转window窗口 map <c-j> <c-w>j map < ...

  7. 2024 暑假友谊赛 1 (7.13)zhaosang

    A-A https://vjudge.net/contest/638765#problem/A 一开始贪心做不出来,后面发现是dp找到转移方程即可,01dp问题 代码如下 #include <b ...

  8. odoo 通过Javascript显示或隐藏form自带按钮

    实践环境 Odoo 14.0-20221212 (Community Edition) 需求描述 如下,根据条件对form视图自带按钮的显示.隐藏进行控制 代码实现 隐藏.显示编辑和创建按钮为例 od ...

  9. 基于动态数据源的SAAS系统(SpringBoot+MybaitsPlus+Durid)

    一.什么是SAAS系统 SAAS全称 Software as a Service,软件即服务.本人接触SAAS也在近两年:在我的理解,SAAS不是特指某种系统,它是提供某类产品的系统服务平台,让第三方 ...

  10. k8s(3) 集群运行

    Master下面执行 mkdir -p $HOME/.kube 执行的脚本,需要读取的配置文件 cp -i /etc/kubernetes/admin.conf $HOME/.kube/config ...