AtCoder Beginner Contest 147
#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 ;
}
#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 ;
}
暴力枚举每种组合即可
#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);
}
按位做即可
#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 ;
}
$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 ;
}
即求能组成多少种 $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的更多相关文章
- AtCoder Beginner Contest 147 E. Balanced Path
思路: dp,使用了bitset优化. 实现: #include <bits/stdc++.h> using namespace std; ; const int INF = 0x3f3f ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
随机推荐
- poj 1979 Red and Black 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=1979 Description There is a rectangular room, covered with square tiles ...
- (day59)十一、CSRF、Auth模块、impotlib模块、settings源码
目录 一.模拟实现中间件的编程思想 (一)impotlib模块 (二)实现功能的配置使用 二.跨站请求伪造CSRF (一)由来 (二)form表单的CSRF (三)ajax中的CSRF (1)通过da ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- 【python爬虫】正则表达式
一.数据的分类 1.结构化数据 特点:数据以行为单位,每一个数据表示一个实体.每一行数据的属性都是一样的. 举例:关系型数据库中的表就是结构化数据. 处理方法:sql 2.半结构化数据 特点:结构化数 ...
- Apollo服务端设计原理剖析
本文摘自于<Spring Cloud微服务 入门 实战与进阶>一书. 1 配置发布后的实时推送设计 配置中心最重要的一个特性就是实时推送了,正因为有这个特性,我们可以依赖配置中心做很多事情 ...
- Luogu P3600 随机数生成器
Luogu P3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成\(n\)个\([1,x]\)的整数\(a_1...a_n\) ...
- 【shell脚本】nginx启动脚本
[root@localhost init.d]# cat nginx #!/bin/bash #nx Startup script for the Nginx HTTP Server # it ver ...
- Ubuntu 安装最新版nodejs
转自:ubuntu快速安装最新版nodejs,只需2步 第一步,去 nodejs 官网 https://nodejs.org 看最新的版本号: 也就是说此时此刻,12.6.0 是最新的版本,不过你求稳 ...
- boolean matches(String regex)正则表达式判断当前字符串是否满足格式要求
package seday02;/*** boolean matches(String regex) * 使用给定正则表达式判断当前字符串是否满足格式要求,满足 则返回true. * 注意:此方法是做 ...
- String字符串是不变对象,内容一旦创建不可改变,若改变一定会创建新对象
package seday01;/** * 字符串是不变对象,内容一旦创建不可改变,若改变一定会创建新对象* @author xingsir */public class StringDemo { p ...