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. http2多路复用

    http2多路复用 HTTP2采用二进制格式传输,取代了HTTP1.x的文本格式,二进制格式解析更高效. 多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过同一个TCP连接并发完成 ...

  2. angular6 升级到 angular7+ 最新Ng-zorro

    angular7 出来有一段时间了,然后我们项目一直用的是angular6, 看到一直再用的Ng-Zorro 更新版本了,然后就觉得把目前的项目也升级一下把. 目前我本地cli版本是6.0.8我要把他 ...

  3. Wireshark 抓取USB的数据包

    需要使用root权限来运行Wireshark,并利用Wireshark来嗅探USB通信数据.当然了,我们并不建议大家利用root权限来进行操作.我们可以使用Linux提供的usbmon来为我们获取和导 ...

  4. python之面向对象设计、编程

    面向对象 一.编程三个范式 1.面向过程编程 2.函数式编程 数学层面的函数 python中的函数编程 3.面向对象编程 二.面向对象设计 1.类:把一类事物共同的特征和共同的动作整合在一起就是类: ...

  5. webUploader的使用

    webUploader的使用记录 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML ...

  6. Linux vi文档操作

    使用操作 a 在光标后插入    A 插入行末   i 在光标前插入   I 插入行首 o 向下切换一行 O 向上开一行 dd 删除一整行 x 删除光标后一个字符   X 删除光标前一个字符 shif ...

  7. Oracle - 截取指定日期的alert log

    工作中DBA经常会查看alert log来检查数据库后台都记录了些什么日志,如果只想看某一天或者某段时间范围的日志,能够把这些日志从大的alert log中截取下来放到一个单独的文件中,对于查看和下载 ...

  8. 前端之CSS1

    CSS基本语法和引入方式 CSS介绍 为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开,CSS由此而诞生,CSS是 Cascading Style Sheets 的首字母缩写,意思是层叠 ...

  9. 用 Python 带你看各国 GDP 变迁

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 周萝卜 源自:萝卜大杂烩 PS:如有需要Python学习资料的小伙伴 ...

  10. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...