Atcoder ARC 082C/D
C - Together
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_a
本题是一个数学问题。
有一个长度为n的自然数列a[1..n],对于每一个a[i],有三种操作:
①inc a[i];
②dec a[i];
③do nothing。
之后,选择一个自然数x,统计数列中等于x的元素的数目num(x),最大化答案。
考虑x有以下三种来源:
①x:=inc a[i],while a[i]==x-1;
②x:=dec a[i],while a[i]==x+1;
③x:=a[i],while a[i]==x。
于是,对于每一个x,num(x)的最大值为cnt(x-1)+cnt(x)+cnt(x+1)。
参考程序如下:
#include <stdio.h>
#define MAX_A 100010 int cnt[MAX_A]; int main(void)
{
int n;
scanf("%d", &n);
for (int i = ; i < n; i++) {
int a;
scanf("%d", &a);
cnt[++a]++;
}
int ans = ;
for (int i = ; i < MAX_A; i++) {
int cur = cnt[i - ] + cnt[i] + cnt[i + ];
if (cur > ans) ans = cur;
}
printf("%d\n", ans);
return ;
}
D - Derangement
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_b
本题是一个数学问题。
有一个长度为n的数列a[1..n],这是一个1..n的排列。有操作:交换相邻的两个元素。经过有限次交换操作,这个排列将满足:对任意1≤i≤n,有a[i]≠i。求最小的交换次数。
对于每一个位置,记a[i]=i的情形为X,a[i]≠i的情形为O,则考虑相邻元素的情形:
①“XO”(或“OX”):a[i]=i,a[i+1]=x(x≠i,i+1)。此时,交换a[i]和a[i+1],即有a[i]=x(x≠i,i+1),a[i+1]=i,为“OO”;
②“XX”:a[i]=i,a[i+1]=i+1。此时,交换a[i]和a[i+1],即有a[i]=i+1,a[i+1]=i,为“OO”。
于是,对于每一个X,若这个位置i<n,则交换a[i]和a[i+1];若这个位置为n,则交换a[n-1]和a[n]。自左向右检查即可。
可见,“XO”、“OX”、“XX”三种情形的交换次数均为1,统计出现以上情形的次数即可。
参考程序如下:
#include <stdio.h>
#define MAX_N 100001 int a[MAX_N]; int main(void)
{
int n;
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d", &a[i]);
int cnt = ;
for (int i = ; i <= n; i++) {
if (a[i] == i) {
cnt++;
if (i < n && a[i + ] == i + ) i++;
}
}
printf("%d\n", cnt);
return ;
}
Atcoder ARC 082C/D的更多相关文章
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
- AtCoder ARC 076E - Connected?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...
- AtCoder ARC 076D - Built?
传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...
- AtCoder ARC 082E - ConvexScore
传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- 【题解】Atcoder ARC#96 F-Sweet Alchemy
首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...
- AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision
题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...
- 【题解】Atcoder ARC#67 F-Yakiniku Restaurants
觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...
- 【题解】Atcoder ARC#85 E-MUL
……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...
随机推荐
- linux网络測试命令
ping 192.168.1.103 -c 3 ping我的IP3次 port探測 telnet 192.168.1.103 80 路由跟踪 traceroute www.imooc.co ...
- selenium IDE 回放报错
解决:Selenium RC未启动,启动即可. java -jar selenium-server-standalone-2.25.0.jar 启动RC报错,提示找不到firefox的path,于是配 ...
- pcm数据生成wav文件
Qt由pcm数据生成wav文件 void AudioGrabber::saveWave(const QString &fileName, const QByteArray &raw, ...
- 请求文件下载URL过长处理
/* * PostNewWin * Author:ppchen */var PostNewWin = function(url){ var urlArr = url.split("?& ...
- jabberNet 发送出席信息
没代码我说个J8: public void Presence(User.EStatus status) { string statustxt = ""; //说明文字.比如,离开的 ...
- Android中关于内部存储的一些重要函数
一.简介 Android中,你也可以通过绝对路径以JAVA传统方式访问内部存储空间.但是以这种方式创建的文件是对私有,创建它的应用程序对该文件是可读可写,但是别的应用程序并不能直接访问它.不是所有的内 ...
- 【POJ 2449】 Remmarguts' Date
[题目链接] http://poj.org/problem?id=2449 [算法] A*(启发式搜索) 首先,求第k短路可以用优先队列BFS实现,当T第k次入队时,就求得了第k短路,但是,这种做法的 ...
- Coursera Algorithms week1 算法分析 练习测验: 3Sum in quadratic time
题目要求: Design an algorithm for the 3-SUM problem that takes time proportional to n2 in the worst case ...
- 网易UI自动化测试工具Airtest中导入air文件中的方法
最近看了一下网易的Airtest ,UI测试工具,写了一些后在导入其他air文件中的.py文件,卡了一下,现在博客中纪录一下导入其他air文件的方式: 在Airtest 测试工具中,导入其他air文件 ...
- BZOJ 4800 折半暴搜
思路: 把它拆成两半 分别搜一发 两部分分别排好序 用two-pointers扫一遍 就可以了. (读入也要用long long) //By SiriusRen #include <cstdi ...