传送门

A - Password

输出\(n*n*n\)即可。

Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
int n;
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
cout << n * n * n;
}

B - Buffet

简单模拟。

Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 25;
int n;
int a[N], b[N], c[N];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++) cin >> b[i];
for(int i = 1; i < n; i++) cin >> c[i];
int ans = 0;
a[0] = -2;
for(int i = 1; i <= n; i++) {
ans += b[a[i]];
if(a[i] == a[i - 1] + 1) ans += c[a[i - 1]];
}
cout << ans;
}

C - Maximal Value

题意:

现在有\(n\)个数,每个数为\(a_i\),但你现在并不知道\(a\)。

现在给出\(n-1\)个数\(b_i\),满足\(b_i\geq max(a_i,a_{i+1})\),现在问\(\sum {a_i}\)最大的可能值为多少。

思路:

我们可以先只对两位分情况讨论一下:

  • 假设现在有\(b_i\leq b_{i+1}\),那么显然\(a_{i+1}\)只能为\(b_i\),要让和最大,那么\(a_i=b_i,a_{i+2}=b_{i+1}\);
  • 若\(b_i>b_{i+1}\),那么有\(a_{i+1}=b_{i+1},a_i=b_i,a_{i+2}=b_{i+1}\)。
  • 注意到不论哪种情况,都有\(a_i=b_i,a_{i+2}=b_{i+1},a_{i+1}\)为两者的最小值。

所以直接这样来搞就行了。

Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 105;
int n;
int a[N], b[N];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
for(int i = 1; i < n; i++) cin >> b[i];
int ans = 0;
for(int i = 2; i < n; i++) {
ans += min(b[i - 1], b[i]);
}
ans += b[1] + b[n - 1];
cout << ans;
}

D - Face Produces Unhappiness

题意:

现在给出一个只含\(L,R\)的序列,现在定义\(good pos\)为:假设当前为\(L\),其左边也为\(L\);或者当前为\(R\),其右边也为\(R\)。

现在你可以进行至多\(k\)次操作,每次操作可以选择一段区间将其翻转,注意是区间翻转\(180\)度,朝向和位置都会改变。

现在问最多可以有多少个\(goodpos\)。

思路:

  • 注意到每次翻转一段区间\([l,r]\),最多会多出\(2\)个\(goodpos\)。
  • 为什么?
  • 首先我们肯定会选择类似于这样的区间\(R[L\cdots L]R\)或者\(L[R\cdots R]L\)这样的才能最优,不然你翻转一下有啥用?
  • 并且又因为区间里面不会产生新的\(goodpos\),所以分析一下边界就行啦。
  • 也就是说每次会多两个\(goodpos\),会不会出现只多\(1\)个的情况呢?
  • 肯定会的,这时肯定翻转一次就全都一样的,所以最终答案就为\(min(n-1,now+2*k)\)。

实现起来还是很简单的~

Code
#include <bits/stdc++.h>
#define MP make_pair
using namespace std;
typedef long long ll;
const int N = 1e5 + 5; int n, k;
char s[N]; int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n >> k;
cin >> s + 1;
int ans = 0;
for(int i = 1; i <= n; i++) {
if(s[i] == s[i - 1] && s[i] == 'L') ++ans;
}
for(int i = n; i >= 1; i--) {
if(s[i] == s[i + 1] && s[i] == 'R') ++ans;
}
ans = min(n - 1, ans + 2 * k);
cout << ans;
}

E - Second Sum

题意:

定义\(X_{L,R}\)表示区间\([L,R]\)中第二大的数。

现在给出一个\(1\)~\(n\)的排列,求:

\[\sum_{L=1}^{N-1}\sum_{R=L+1}^N X_{L,R}
\]

思路:

  • 显然我们可以枚举每个数,并将其作为区间第二大数,然后看有多少个区间满足条件。
  • 然后我一开始写了个线段树\(T\)了...
  • 其实并不用,因为每次我们只需要用上比它大的数,所以我们从大的数往小搞,每次将其\(pos\)插入一个\(set\)里面就行了。
  • 之后直接在\(set\)里面二分,因为比它大的数的\(pos\)是具有单调性的。
  • 当我们找到区间右边比它大的两个位置和左边比它大的两个位置之后,直接统计答案即可。

细节见代码:

Code
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 1e5 + 5; int n;
vector <pii> v; multiset <int> s; int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) {
int x; cin >> x;
v.push_back(MP(x, i));
}
s.insert(0), s.insert(0);
s.insert(n + 1), s.insert(n + 1);
sort(v.begin(), v.end());
reverse(v.begin(), v.end());
ll ans = 0;
for(auto i : v) {
int num = i.fi, p = i.se;
auto it = s.lower_bound(p);
int R1 = *it++;
int R2 = *it--;
--it;
int L1 = *it--;
int L2 = *it;
if(L1) ans += 1ll * num * (L1 - L2) * (R1 - p);
if(R1 <= n) ans += 1ll * num * (p - L1) * (R2 - R1);
s.insert(p);
}
cout << ans;
return 0;
}

F - Many Slimes

感觉这是一个很简单的贪心模拟题?

用\(vector+set\)模拟一下繁衍的过程即可,每次最大的数肯定产生比它小的最大的数,所以在\(vector\)中依次把数取出来,然后直接在\(set\)里面查找即可。

一开始写了个\(O(n)\)利用指针模拟的写法,但有两个点\(wa\)了...痛苦。

Code

AtCoder Beginner Contest 140的更多相关文章

  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. How to: Supply Initial Data for the Entity Framework Data Model 如何:为EF数据模型提供初始数据

    After you have introduced a data model, you may need to have the application populate the database w ...

  2. JavaScript定时器(Timer)

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.cnblogs.com/gaoguowen/p/11119088.html 什么是定时器 简单来说就是在一段时间间隔后执行一 ...

  3. 50-overlay 如何实现跨主机通信?

    上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...

  4. [Go] 实现websocket服务端

    直接使用官方子包可以实现websocket协议, golang.org/x/net/websocket 如果在这个目录没有这个包就去github下载net库,放进这个目录$GOPATH/src/gol ...

  5. pymysql用法,Python连接MySQL数据库

    Pymysql模块是专门用来操作mysql数据库的模块,使用前需要安装,安装指令:pip install pymysql 操作流程: 第一步:import pymysql 第二步:获取数据库的连接 , ...

  6. C语言中,关于相除的问题

    若定义的类型是 整数型:int a,b ;则a/b的值为整数的,不会带着小数点的..... 若定义的数据类型是 浮点型的 :double a,b; 则这种情况下,得到的结果与数学结果无异

  7. Zabbix-(七)分布式监控

    Zabbix-(七)分布式监控 一.前言 Zabbix提供了一套分布式监控的方案,即使用Zabbix Proxy,本文记录使用Zabbix Proxy进行分布式监控. 官方所述Proxy的使用场景如下 ...

  8. Web安全测试学习笔记-DVWA-SQL注入-2

    接上一篇SQL注入的学习笔记,上一篇我通过报错信息得知后台数据库是MySQL(这个信息非常重要~),然后通过SQL注入拿到了用户表的所有行,其实我们还可以通过MySQL的特性来拿更多的信息. 1. 获 ...

  9. go语言之数据类型和格式化输出

    1.数据类型 package main import ( "fmt" "reflect" ) func main() { //整形 var v1 int32 v ...

  10. ASP.NET是什么?

    ASP.NET简介 简单来说,ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器脚本创建网页和网站的开发框架. 微软在2001年开发的第一个版本的ASP.NET,是一种建立在 ...