传送门

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. 文件系统之parted 分区

    parted分区命令 1.分区表区别 我们 Linux 系统中有两种常见的分区表 MBR 分区表(主引导记录分区表)和 GPT 分区表(GUID 分 区表) MBR 分区表:支持的最大分区是 2TB( ...

  2. 操作MyBatis引发Error setting null for parameter #X with JdbcType OTHER .无效的列类型

    再用MyBatis操作Oracle的时候,传入null值而引发的错误 异常信息: org.springframework.jdbc.UncategorizedSQLException: Error s ...

  3. MySQL5.7脚本自动安装

    脚本里面没有把同步时间写进去,这个写在最前面yum install -y ntp ntpdatecp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localti ...

  4. ElasticSearch: SearchContextMissingException[No search context found for id [173690]]

    这个原因是scroll的时间设置不够久,设久一些就可以了. ----------------------------------- 原文:https://www.cnblogs.com/chenmz1 ...

  5. 自建KMS服务器激活Windows office

    一.KMS服务器环境介绍    操作系统Centos 7.x  Windows Server 也是可以的,此处以Centos7为例安装,使用默认1688端口号 二.服务端安装过程: 1.下载安装包(这 ...

  6. 2019/12/13学习内容摘要(Linux磁盘管理①)

    一,查看磁盘或目录容量 1.命令df  查看已挂载磁盘的总容量,使用容量,剩余容量等,可以不加任何参数,默认以KB为单位 选项[-i] 表示查看inodes的使用情况 [-h] 表示用合适的单位显示 ...

  7. 常用注解解析(因为不太明白@component和@configuration写了)

    1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...

  8. 在浏览器地址栏输入www.baidu.com到打开百度首页这期间到底发生了什么?

    刚才无意间看到这么一个面试题,觉得有点意思,我想从五层网络模型的角度说说我的看法. 1.首先通过DNS域名系统向域名服务器发送域名解析请求来得到百度的IP地址39.156.69.79:2.系统通过AR ...

  9. 改变JAVA窗体属性的操作方法

    在本篇内容里小编给大家详细分析了关于改变JAVA窗体属性的操作方法和步骤,需要的朋友们学习下. 若将JDK版本升级到最新版本,Java窗体就可以简单实现窗体的透明效果,用户可以通过拉动滑块(Slide ...

  10. JS-正则表达式解析

    正则表达式通常用于输入校验,用法示例为 if (!(/^1[345789]\d{9}$/.test($('.tel').val()))) { $.toast("手机号格式有误", ...