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

于是,对于每一个xnum(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的情形为Xa[i]≠i的情形为O,则考虑相邻元素的情形:

①“XO”(或“OX”):a[i]=ia[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]=ia[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的更多相关文章

  1. 【题解】Atcoder ARC#90 F-Number of Digits

    Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...

  2. AtCoder ARC 076E - Connected?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_c 平面上有一个R×C的网格,格点上可能写有数字1~N,每个数字出现两次.现在用一条曲线将一对相同的 ...

  3. AtCoder ARC 076D - Built?

    传送门:http://arc076.contest.atcoder.jp/tasks/arc076_b 本题是一个图论问题——Manhattan距离最小生成树(MST). 在一个平面网格上有n个格点, ...

  4. AtCoder ARC 082E - ConvexScore

    传送门:http://arc082.contest.atcoder.jp/tasks/arc082_c 本题是一个平面几何问题. 在平面直角坐标系中有一个n元点集U={Ai(xi,yi)|1≤i≤n} ...

  5. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  6. 【题解】Atcoder ARC#96 F-Sweet Alchemy

    首先,我们发现每一个节点所选择的次数不好直接算,因为要求一个节点被选择的次数大于等于父亲被选择的次数,且又要小于等于父亲被选择的次数 \(+D\).既然如此,考虑一棵差分的树,规定每一个节点被选择的次 ...

  7. AtCoder ARC 090 E / AtCoder 3883: Avoiding Collision

    题目传送门:ARC090E. 题意简述: 给定一张有 \(N\) 个点 \(M\) 条边的无向图.每条边有相应的边权,边权是正整数. 小 A 要从结点 \(S\) 走到结点 \(T\) ,而小 B 则 ...

  8. 【题解】Atcoder ARC#67 F-Yakiniku Restaurants

    觉得我的解法好简单,好优美啊QAQ 首先想想暴力怎么办.暴力的话,我们就枚举左右端点,然后显然每张购物券都取最大的值.这样的复杂度是 \(O(n ^{2} m)\) 的.但是这样明显能够感觉到我们重复 ...

  9. 【题解】Atcoder ARC#85 E-MUL

    ……没啥可说的.最大权闭合子图,跑下dinic就好了…… #include <bits/stdc++.h> using namespace std; #define maxn 500000 ...

随机推荐

  1. 小米红米1S 电信/联通版 专用TWRP2.8.1.1中文版 (全屏触摸/支持MTP挂载内外置存储)

    转载请注明出处和链接: http://blog.csdn.net/syhost/article/details/39340477 说说中文TWRP的简史:          中文TWRP是本人在201 ...

  2. 用CSS3实现带有阴影效果和颜色渐变的按钮

    这里讲下如何利用css3里的两个新属性 box-shadow和transition来实现如下所示的带有阴影和颜色渐变效果的按钮(下面这个只是图片:本想直接在这个页面下嵌html的,,试了后发现有些cs ...

  3. 使用U-Boot的TFTP(远程/网络内核)

    前提条件 假设您的主机PC运行的是Ubuntu 14.04.1 LTS或更高版本,并且与您的开发平台在同一个本地网络上;为了简单起见,我们假设网络上也有DHCP服务器.如果使用Juno,请确保使用的是 ...

  4. 动手分析安卓仿QQ联系人列表TreeView控件

    因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码.   一. 需要用 ...

  5. Webstorm配置运行React Native

    Webstorm配置运行React Native 1.选择配置 2.选择npm,设置package等参数 3.添加拓展工具 4.配置拓展工具(核心啊) 5.运行测试,ok的.

  6. POJ 3264 Balanced Lineup (线段树)

    Balanced Lineup For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the s ...

  7. B5090 组题 二分答案

    bzoj有毒,看不了自己哪错了...根本没法debug. 我到现在还是不知道自己代码为什么会T,二分次数也加限制了,但是还是T...救命啊!!! 题干: Description 著名出题人小Q的备忘录 ...

  8. RPC通信框架——RCF介绍

    现有的软件中用了大量的COM接口,导致无法跨平台,当然由于与Windows结合的太紧密,还有很多无法跨平台的地方.那么为了实现跨平台,支持Linux系统,以及后续的分布式,首要任务是去除COM接口. ...

  9. Doubles

    http://poj.org/problem?id=1552 #include<stdio.h> ; int main() { int n,f[N],g[N]; int cnt; ) { ...

  10. [Apple开发者帐户帮助]五、管理标识符(5)创建一个iCloud容器

    您必须拥有一个或多个iCloud容器才能启用iCloud. 所需角色:帐户持有人或管理员. 在“ 证书”,“标识符和配置文件”中,从左侧的弹出菜单中选择操作系统. 在“标识符”下,选择“iCloud容 ...