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. linux 库文件配置

    linux 库文件配置 /etc/ld.so.conf 或 /etc/ld.so.conf.d/*.conf

  2. LeetCode 5365. 可被三整除的最大和 Greatest Sum Divisible by Three

    地址 https://www.acwing.com/solution/leetcode/content/6340/ 题目描述给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和. 示例 : ...

  3. 大话设计模式Python实现-中介者模式

    中介者模式(Mediator Pattern):用一个对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互. 下面是一个中介者模式的demo ...

  4. 16-DRF工程搭建与序列化器

    1.DRF工程搭建 环境安装与配置 DRF是以Django扩展应用的方式提供的,所以我们可以直接利用Django环境,而无需创建(先创建Django环境). 1.安装DRF pip3 install ...

  5. 使用pymysql模块进行封装,自动化不可或缺的数据库校验

    import pymysql class HandleMysql: ''' 定义一个mysql处理类 ''' def __init__(self, hostname, username, passwo ...

  6. centos7之firewalld防火墙的配置与使用

    firewalld是centos7开始提供的管理防火墙工具,提供了一个动态管理的防火墙,当然低层仍然调用的是 netfilter . 一.区域(zone)firewalld将网卡对应到不同的区域(zo ...

  7. 用Java实现二叉查找树

    二叉查找树的实现 1. 原理 二叉查找树,又称为二叉排序树.二叉搜索树.对于树中每一个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项.二叉查找树的平均深度为O(log ...

  8. Web前端—— JQuery迷你版实现以及使用

    JQuery迷你版实现以及使用 tiny_jquery.js var $ = function (selector) { var ele = document.querySelector(select ...

  9. JavaWeb之Fliter & Listener

    Fliter & Listener Listener 监听器 作用 监听某一事件的发生.状态的改变. 监听器内部实现机制 接口回调 接口回调 A在执行循环,当循环到5的时候, 通知B. 事先先 ...

  10. Tomcat安装、使用(Windows)

    一.下载.安装 1.下载 进官网下载 : https://tomcat.apache.org/ 选择自己适合的版本.在这里演示的是下载 Tomcat 7(解压安装版). 2.解压.启动tomcat 解 ...