比赛链接:https://atcoder.jp/contests/abc162/tasks

A - Lucky 7

#include <bits/stdc++.h>
using namespace std;
int main() {
int n; cin >> n;
cout << (to_string(n).find("7") != -1 ? "Yes" : "No");
}

B - FizzBuzz Sum

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
ll n; cin >> n;
ll ans = 0;
for (ll i = 1; i <= n; i++) {
if (i%3 && i%5) ans += i;
}
cout << ans;
}

C - Sum of gcd of Tuples (Easy)

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
ll k; cin >> k;
ll ans = 0;
for (ll a = 1; a <=k ; a++) {
for (ll b = 1; b <= k; b++) {
for (ll c = 1; c <=k; c++) {
ans += __gcd(__gcd(a,b),c);
}
}
}
cout << ans;
}

D - RGB Triplets

题意

一字符串由 $RBG$ 组成,找出三元组 $(i, j, k)$ 满足:

  • $i<j<k$
  • $s[i]!=s[j]\ \&\&\ s[i]!=s[k]\ \&\&\ s[j]!=s[k]$
  • $j-i\ !=\  k-j$

思路一

存储 $3$ 个字母的位置,枚举 $9$ 种前后情况,二分查找满足 $j>i,k>j$ 的下标。

代码一

#include <bits/stdc++.h>
using ll = long long;
using namespace std; int n; string s;
vector<int> v[3]; inline int idx(int b, int a, int i) { //在 v[b] 中寻找第一个不小于 v[a][i] 的下标
return upper_bound(v[b].begin(), v[b].end(), v[a][i]) - v[b].begin();
} ll cal(int a, int b, int c) {
ll ret = 0;
for (int i = 0; i < v[a].size(); i++) {
for (int j = idx(b, a, i); j < v[b].size(); j++) {
for (int k = idx(c, b, j); k < v[c].size(); k++) {
if (v[b][j] - v[a][i] != v[c][k] - v[b][j]) { //等价于条件中的 j - i != k - j
++ret;
}
}
}
}
return ret;
} int main() {
cin >> n >> s;
for (int i = 0; i < n; i++) { //存储不同字母的位置
if (s[i] == 'R') v[0].push_back(i);
else if (s[i] == 'G') v[1].push_back(i);
else v[2].push_back(i);
}
ll ans = 0;
for (int i = 0; i < 3; i++) { //枚举RGB的前后情况
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
if (i != j && i !=k && j != k) {
ans += cal(i, j, k);
}
}
}
}
cout << ans;
}

思路二

求出总的情况数减去不满足条件的情况。

代码二

#include <bits/stdc++.h>
#define c1 s[i]
#define c2 s[i + d]
#define c3 s[i + d + d]
using ll = long long;
using namespace std;
int main() {
int n; cin >> n;
string s; cin >> s;
int a[3] = {};
for (char c : s) {
if (c == 'R') ++a[0];
else if (c == 'G') ++a[1];
else ++a[2];
}
ll ans = 1LL * a[0] * a[1] * a[2];
for (int i = 0; i < n - 2; i++) {
for (int d = 1; i + d + d < n; d++) {
if (c1 != c2 and c1 != c3 and c2 != c3)
--ans;
}
}
cout << ans;
}

E - Sum of gcd of Tuples (Hard)

题意

有 $n$ 个大小为 $1{\sim}k$ 的数,找出所有情况中的 $gcd(a_1,a_2,...,a_n)$ 之和。

思路

设 $gcd_i$ 为 $gcd(a_1,a_2,...,a_n)=i$ 的排列个数,答案即 $\sum_{i=1}^{k}i{\times}gcd_i$。

$k$ 中 $i$ 的倍数有 $\lfloor \frac{k}{i} \rfloor$ 个,所以 $gcd=i$ 的情况共有 ${\lfloor \frac{k}{i} \rfloor}^n$ 种,但这其中有重复的情况,比如当计算 $gcd=2$ 时,同时也会得到 $gcd=4、6、8$ 等等的排列,所以我们需要从 $\frac{k}{2}$ 起反向遍历减去重复的情况。

代码

#include <bits/stdc++.h>
using ll = long long;
using namespace std; const ll mod = 1e9 + 7; ll fpow(ll a, ll b) { ll ret = 1; while (b) { if (b & 1) ret = ret * a %mod; a = a * a % mod; b >>= 1; } return ret; } int main() {
ll n, k; cin >> n >> k;
ll gcd[k+1] = {};
for (int i = 1; i <= k; i++)
gcd[i] = fpow(k / i, n);
for (int i = k / 2; i >= 1; i--)
for (int j = i + i; j <= k; j += i)
gcd[i] -= gcd[j];
for (int i = 1; i <= k; i++)
gcd[i] = i * gcd[i] % mod;
cout << accumulate(gcd + 1, gcd + 1 + k, 0LL) % mod;
}

F - Select Half

题意

有 $n$ 个数,求取 $\lfloor\frac{n}{2}\rfloor$ 个两两不相邻的数的最大和。

思路

设 $dp[i]$ 为长为 $i$ 时取 $\lfloor\frac{i}{2}\rfloor$ 个数的最大和。

当 $i$ 为奇数时,如果取 $a_i$,$dp_i=dp_{i-2}+a_i$,否则 $dp_i=dp_{i-1}$。

当 $i$ 为偶数时,如果取 $a_i$,$dp_i=dp_{i-2}+a_i$,否则 $dp_i=pre\_sum_{i-1}$。

比如当 $i=4$ 时,如果不取 $a_4$,要想在之前的 $a_1\ a_2\ a_3$ 中取够 $2$ 个数,只能取 $a_1\ a_3$,即从  $a_1$ 起间隔为 $2$ 取数作奇数位的前缀和。

代码

#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
int n; cin >> n;
int a[n + 1]; for (int i = 1; i <= n; i++) cin >> a[i]; ll pre_sum[n + 1] = {};
pre_sum[1] = a[1];
for (int i = 3; i <= n; i += 2)
pre_sum[i] = pre_sum[i - 2] + a[i]; ll dp[n + 1] = {};
for (int i = 2; i <= n; i++) {
if (i & 1) {
dp[i] = max(dp[i - 1], dp[i - 2] + a[i]);
} else {
dp[i] = max(pre_sum[i - 1], dp[i - 2] + a[i]);
}
}
cout << dp[n];
}

AtCoder Beginner Contest 162的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

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

  2. AtCoder Beginner Contest 052

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

  3. AtCoder Beginner Contest 053 ABCD题

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

  4. AtCoder Beginner Contest 136

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

  5. AtCoder Beginner Contest 137 F

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

  6. AtCoder Beginner Contest 076

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

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

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

  8. AtCoder Beginner Contest 064 D - Insertion

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

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

随机推荐

  1. java之环境配置

    前言:本人环境 Windows10(64位),jdk1.8.131 开发工具: IDEA 第一步: 获取JDK 方法一:推荐官网(此方法需要oracle账号,可以免费注册)   方法二:百度网盘(需要 ...

  2. 【Flutter】容器类组件之Container容器

    前言 Container是一个组合类容器,它本身不对应具体的RenderObject,它是DecoratedBox.ConstrainedBox.Transform.Padding.Align等组件组 ...

  3. 剑指 Offer 16. 数值的整数次方

    实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 来源:力扣(LeetCode) 链接 ...

  4. Tengine 四层代理:

    Tengine 四层代理: 1 ) 安装tengine ( nginx1.9 以上版本 编译以后要支持stream 模块) 1.1 ) tengine(nginx) 一定要是nginx-1.9.X 以 ...

  5. wpf 中用 C# 代码创建 PropertyPath ,以对间接目标进行 Storyboard 动画.

    如图,一个 Rectangle 一个 Button ,点击按钮时要通过动画完成对 Rectangle填充色的渐变动画. Xaml: 1 <Window 2 x:Class="WpfAp ...

  6. 【Linux】dlopen failed: /lib/lsiRAID.so: cannot open shared object file: No such file or directory

    遇到这个问题,首先第一反应,是看其他的服务器中是否有这个库文件,如果有的话直接cp过来一份就行 但是检查发现,其他的系统中也不存在lsiRAID.so这个库文件,很神奇.. 但是看日志持续报错,查看s ...

  7. 响应式编程库RxJava初探

    引子 在读 Hystrix 源码时,发现一些奇特的写法.稍作搜索,知道使用了最新流行的响应式编程库RxJava.那么响应式编程究竟是怎样的呢? 本文对响应式编程及 RxJava 库作一个初步的探索. ...

  8. Nacos 服务配置中心

    1.因为项目是微服务分布式项目,每个微服务都需要用到配置中心,所以第一步我们先在common中添加相应的依赖 <dependency> <groupId>com.alibaba ...

  9. jmeter-登录获取cookie后参数化,或手动添加cookie, 再进行并发测试

    以下情况其实并不适用于直接登录可以获取cookie情况,直接可以登录成功,直接添加cookie管理,cookie可以直接使用用于以下请求操作. 如果登录一次后,后续许多操作,可以将cookie管理器放 ...

  10. (Oracle)预定义异常

    预定义异常: 为了 Oracle 开发和维护的方便,在 Oracle 异常中,为常见的异常码定义了对应的异常名称,称为预定义异常,常见的预定义异常有: 异常名称 异常码 描述 DUP_VAL_ON_I ...