D - Ki

题意:给一棵有根树,节点1为根,有$Q$次操作,每次操作将一个节点及其子树的所有节点的权值加上一个值,问最后每个节点的权值。

思路:dfs序再差分一下就行了。

#include <bits/stdc++.h>
using namespace std; const int N = 2e5 + ;
vector<int> G[N];
int dfn[N], id, n, q, last[N], pos[N];
long long val[N], ans[N]; void dfs(int u, int fa) {
dfn[u] = ++id;
pos[id] = u;
for (auto v: G[u]) {
if (v == fa) continue;
dfs(v, u);
}
last[u] = id;
} int main() {
scanf("%d%d", &n, &q);
for (int i = , u, v; i < n; i++) {
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(, );
while (q--) {
long long x;
int u;
scanf("%d%lld", &u, &x);
val[dfn[u]] += x;
val[last[u] + ] -= x;
}
for (int i = ; i <= n; i++) {
val[i] += val[i - ];
ans[pos[i]] = val[i];
}
for (int i = ; i <= n; i++)
printf("%lld%c", ans[i], " \n"[i == n]);
return ;
}

E - Strings of Impurity

题意:给两个字符串$s$, $t$,把$s$复制$10^{100}$次成$s'$,即'abc'变成'abcabc...abcabc',问$t$作为$s'$的子序列出现,最早结束位置的下标,不存在则输出-1。
如样例一
$s'$: conteStcONtest
$t$: son
大写表示匹配上的位置,答案为10。

思路:子序列问题都可以用一个$ne[i][j]$表示$s$串中到了$i$位置,下一个$j$字符的位置,从后往前扫可以预处理出来,然后统计答案就用$t$来贪心地匹配$s$,能匹配多前就多前,当前位置之后没有$t_{j}$这个字符了,就必须进入下一个$s$串中,然后答案只需要看跳了多少个$s$串和最后的位置在哪。

#include <bits/stdc++.h>
using namespace std; const int N = 1e5 + ; char s[N], t[N];
int ne[N][];
int fir[]; int main() {
scanf("%s%s", s + , t + );
int len1 = strlen(s + ), len2 = strlen(t + );
for (int i = len1; i >= ; i--) {
for (int j = ; j < ; j++)
ne[i][j] = fir[j];
if (i) fir[s[i] - 'a'] = i;
}
int id = , ans = ;
for (int i = ; i <= len2; i++) {
if (ne[id][t[i] - 'a']) {
id = ne[id][t[i] - 'a'];
} else {
if (!fir[t[i] - 'a']) {
puts("-1");
return ;
}
id = fir[t[i] - 'a'];
ans++;
}
}
printf("%lld\n", 1LL * (ans - ) * len1 + id);
return ;
}

F - Coincidence

题意:给定 $L$ 和 $R$,问有多少对 $x, y\left(L \leq x \leq y \leq R\right)$ 满足$y$ Mod $x = y$ XOR $x$

思路:
$\because y$ Mod $x < x$
$\therefore y$ XOR $x < x$
所以说明$y$和$x$最高位的1必须在同一个位置
$\therefore \dfrac {y}{x} < 2$
$\therefore y - x = y$ XOR $x$
举几个例子就会发现其实满足这个条件的$y$和$x$在二进制下是可以不用借位直接相减的,比如
$y$: 10110(22)
$x$: 10010(18)
此时$y$ XOR $x = y - x = 4$
就可以得到$y$ And $x = x$且$x$和$y$最高位的1的位置相同
然后就可以数位DP做。
数位DP同时枚举两个数二进制的情况,其中$y$不超过$R$,$x$不小于$L$,当前还有前导零的情况下,这一位$y$和$x$必须相同,之后保证一下$x$的每一位不能大于$y$(即出现$y$当前位是0,$x$当前位是1)就行了。

#include <bits/stdc++.h>
#define ll long long
using namespace std; const int MOD = 1e9 + ;
ll dp[][][][]; ll solve(ll l, ll r, int pos, bool limit1, bool limit2, bool lead) {
if (pos < ) return ;
ll &ans = dp[pos][limit1][limit2][lead];
if (ans != -) return ans;
ans = ;
int up2 = limit2 ? (r >> pos & ) : ;
int up1 = limit1 ? (l >> pos & ) : ;
for (int i = up1; i <= ; i++)
for (int j = ; j <= up2; j++) {
if (i > j) continue;
if (lead && i != j) continue;
(ans += solve(l, r, pos - , limit1 && i == up1, limit2 && j == up2, lead && j == )) %= MOD;
}
return ans;
} int main() {
memset(dp, -, sizeof(dp));
ll l, r;
scanf("%lld%lld", &l, &r);
printf("%lld", solve(l, r, , , , ));
return ;
}

Atcoder Beginner Contest 138 简要题解的更多相关文章

  1. 2018.09.08 AtCoder Beginner Contest 109简要题解

    比赛传送门 水题大赛? 全是水题啊!!! T1 ABC333 就是判断是不是两个数都是奇数就行了. 代码: #include<bits/stdc++.h> using namespace ...

  2. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  3. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  4. AtCoder Beginner Contest 089完整题解

    A - Grouping 2 Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement There a ...

  5. AtCoder Grand Contest 039 简要题解

    从这里开始 比赛目录 Problem A Connection and Disconnection 简单讨论即可. Code #include <bits/stdc++.h> using ...

  6. 2018.09.02 Atcoder Regular Contest 102简要题解

    比赛传送门 T1 Triangular Relationship 分析之后发现有两种情况: 1. n为奇数,那么所有数都是k的倍数. 2. n为偶数,那么所有数都是k/2的倍数. 然后就可以愉快A题了 ...

  7. AtCoder Grand Contest 040 简要题解

    从这里开始 比赛目录 A < B < E < D < C = F,心情简单.jpg. Problem A >< 把峰谷都设成 0. Code #include &l ...

  8. AtCoder Grand Contest 035 简要题解

    从这里开始 题目目录 Problem A XOR Circle 你发现,权值的循环节为 $a_0, a_1, a_0\oplus a_1$,然后暴力即可. Code #include <bits ...

  9. AtCoder Grand Contest 036 简要题解

    从这里开始 比赛目录 Problem A Triangle 考虑把三角形移到和坐标轴相交,即 然后能够用坐标比较简单地计算面积,简单构造一下就行了. Code #include <bits/st ...

随机推荐

  1. IScroll中div点击事件触发两次解决办法

    1.网上的同学说的,直接修改源代码,但是这种方法可能会影响到现有的程序. 搜索onBeforeScrollStart方法,将其中的preventDefault禁止掉搜索_end方法,将其中模拟clic ...

  2. Rsync学习之旅上

    rsync 简介 什么是rsync rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具. 全量:将全部数据,进行传输覆盖 增量:只传输差异部分的数据 实现增量 ...

  3. windows下隐藏磁盘分区(转)

    在一定情况下有的人会想隐藏掉部分分区,比如双系统的情况 有两种方式 方法1: 删除盘符,适合在双系统的情况下隐藏掉另外一个系统相关的分区 请注意是删除盘符 不是删除分区 此电脑右键管理 点击磁盘管理 ...

  4. k8s部署nacos之二 nfs

    1.在linux服务器下载nacos 首先安装git命令 yum install git git clone https://github.com/nacos-group/nacos-k8s.git ...

  5. 『LCA 树链剖分』

    LCA Description 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根 的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公 ...

  6. FusionInsight大数据开发---Flume应用开发

    Flume应用开发 要求: 了解Flume应用开发适用场景 掌握Flume应用开发 Flume应用场景Flume的核心是把数据从数据源收集过来,在送到目的地.为了保证输送一定成功,发送到目的地之前,会 ...

  7. C#条码生成及打印实例代码

    ";//条码 ; ; //打印按钮 private void button1_Click(object sender, EventArgs e) { //实例化打印对象 PrintDocum ...

  8. SecureCRT上传本地文件到linux

    1.使用crt登录到需要操作的linux系统 2.按Alt+P打开sftp传输界面 3.输入pur指令加文件路径,例如:put E://srs-3.0.zip按enter就可以 4.再返回crt界面, ...

  9. 异常详细信息: System.Security.SecurityException: 未找到源,不过,未能搜索部分或所有事件日志。 若要创建源,您需要用于读取所有事件日志的权限以确保新的源名称是唯一的。 不可访问的日志: Security。

    “/”应用程序中的服务器错误. 安全性异常 说明: 应用程序尝试执行安全策略不允许的操作.要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别. 异常详细信息: Sy ...

  10. 2019 中手游java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.中手游等公司offer,岗位是Java后端开发,因为发展原因最终选择去了中手游,入职一年时间了,也成为了面试官 ...