A - Blackjack

#include <bits/stdc++.h>

int main() {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
a += b + c;
if (a >= )
puts("bust");
else
puts("win");
return ;
}

B - Palindrome-philia

#include <bits/stdc++.h>

int main() {
static char s[];
scanf("%s", s);
int n = strlen(s);
int ans = ;
for (int i = ; i < n / ; i++) {
if (s[i] != s[n - - i]) ans++;
}
printf("%d\n", ans);
return ;
}

C - HonestOrUnkind2

暴力枚举每种组合即可

#include <bits/stdc++.h>
#define pii pair<int, int> const int N = ;
int n, A[N];
std::vector<std::pii> vec[N];
bool is[N]; int get(int x) {
int ans = ;
while (x) {
ans++;
x &= (x - );
}
return ans;
} bool check() {
for (int i = ; i < n; i++) if (is[i]) {
for (int j = ; j <= A[i]; j++) {
if (vec[i][j].second == && !is[vec[i][j].first]) return false;
if (vec[i][j].second == && is[vec[i][j].first]) return false;
}
}
return true;
} int main() {
scanf("%d", &n);
for (int i = ; i < n; i++) {
scanf("%d", A + i);
vec[i].resize(A[i] + );
for (int j = ; j <= A[i]; j++) {
scanf("%d%d", &vec[i][j].first, &vec[i][j].second);
vec[i][j].first--;
}
}
int ans = ;
for (int i = ; i < ( << n); i++) {
for (int j = ; j < n; j++) {
if (i >> j & ) is[j] = ;
else is[j] = ;
}
if (check()) ans = std::max(ans, get(i));
}
printf("%d\n", ans);
}

D - Xor Sum 4

按位做即可

#include <bits/stdc++.h>
#define ll long long const int MOD = 1e9 + ;
const int N = 3e5 + ;
int cnt[][];
ll A[N]; int main() {
int n;
scanf("%d", &n);
int ans = ;
for (int i = ; i <= n; i++) {
scanf("%lld", A + i);
for (int j = ; j <= ; j++) {
int id = A[i] >> j & ;
id ^= ;
(ans += (1LL << j) % MOD * cnt[j][id] % MOD) %= MOD;
cnt[j][A[i] >> j & ]++;
}
}
printf("%d\n", ans);
return ;
}

E - Balanced Path

$dp[i][j][k]$ 表示走到 $(i,j)$ 位置,能否出现差为 $k - 6400$ 的走法。

然后就背包,可以用 bitset 优化

#include <bits/stdc++.h>

const int N = ;
const int M = ;
int n, m, A[N][N], B[N][N];
std::bitset<M * + > dp[N][N]; int main() {
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", A[i] + j);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", B[i] + j);
dp[][].set(M);
dp[][].set(M);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++) {
int d = std::abs(A[i][j] - B[i][j]);
dp[i][j] |= (dp[i - ][j] << d) | (dp[i - ][j] >> d);
dp[i][j] |= (dp[i][j - ] << d) | (dp[i][j - ] >> d);
}
int ans = 1e9;
for (int i = ; i <= * M; i++)
if (dp[n][m].test(i))
ans = std::min(ans, std::abs(i - M));
printf("%d\n", ans);
return ;
}

F - Sum Difference

即求能组成多少种 $S$。

当 $D=0$ 时,如果 $X=0$,那么 $S$ 只有一种取值 $0$,否则就有 $n+1$ 种取值,$0, X, 2X, \cdots, nX$。

若 $D<0$,可以把 $X$ 和 $D$ 都乘上 $-1$,这样就只需要考虑 $D>0$ 的情况。

当 $S$ 中有 $k$ 个元素时,$S = kX + I * D$

$0 + 1 + \cdots + (k - 1) \leq I \leq (n - k) + \cdots + (n - 1)$。

相当于一条线段,然后再把这条线段左右端点都加上 $kX / D$ 的值,就变成了一个三元组 $(kX \mod D, l, r)$

对于相同的 $kX \mod D$,线段 $l, r$ 的并集就是答案了。

排序之后扫一遍就行了。

AtCoder Beginner Contest 147的更多相关文章

  1. AtCoder Beginner Contest 147 E. Balanced Path

    思路: dp,使用了bitset优化. 实现: #include <bits/stdc++.h> using namespace std; ; const int INF = 0x3f3f ...

  2. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  3. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  4. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  5. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  6. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  7. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  8. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  9. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

随机推荐

  1. idea tomcat debug不能启动的问题

    显示:Connected to the target VM, address: '127.0.0.1:54692', transport: 'socket' 其实原因是没调整好面板.晕 ...

  2. 第05组 Alpha冲刺(3/4)

    第05组 Alpha冲刺(3/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了 ...

  3. Spring Batch与ETL工具比较

    在实际应用中,在批处理中用得较多的是场景是数据同步.在做数据集成工作中,常常需要从源位置把数据同步到目标位置,以便于进行后续的逻辑操作.在做这种批处理工具时,在网上查资料,发现用得比较多的是kettl ...

  4. numpy中多维数组的绝对索引

    这涉及到吧多维数组映射为一维数组. 对于3维数组,有公式: def MAP(x,y,z): return y_s * z_s * x + z_s * y + z 此公式可以推广到N维 测试代码:(两个 ...

  5. Linux中vim和vi编辑器的使用

    vim 和 vi 的关系: 可以将vim视作vi的高级版本,vim可以用颜色或下划线的方式来显示一些特殊信息.vim不止是文本处理软件,而可以说是一个程序开发工具.因为vim里面加入了很多额外功能,例 ...

  6. Python必备收藏!博士大佬总结的Pycharm 常用快捷键思维导图

    ​ 搜索 Ctrl + Shift + F7用法高亮显示 Ctrl + Alt + F7显示用法 编辑 ​ Ctrl + Shift + V从最近的缓冲区粘贴 Ctrl + D复制选定的区域或行到后面 ...

  7. Jenkins—Master/Slave模式

    Jenkins可部署在windows或者linux平台上,项目系统的用户多数为windows系统.如果Jenkins部署在linux上,而自动化任务要在windows平台执行,那么就需要使用Jenki ...

  8. elasticsearch 索引的使用(配合haystack)

    1,# 从仓库拉取镜像$ sudo docker image pull delron/elasticsearch-ik:2.4.6-1.02,下载elasticsearc-2.4.6目录拷贝到home ...

  9. 链表中删除倒数第K个节点

    问题描述 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 问题分析与解决 从问题当中,我们只能得到一个链表和要删除的第K个节点的信息,于是就有以下思路:如 ...

  10. MySQL 表和列的注释

    像代码一样,可以为表以及表中的列添加注释,方便其他人知晓其功能.对于一些字段,在经过一定时间后,创建者未必也能想起其具体的含意,所以注释显得尤为重要. 注释的添加 注释的添加是通过在定义表或列的时候在 ...