A - Multiple of 2 and N


Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 100100 points

Problem Statement

You are given a positive integer NN. Find the minimum positive integer divisible by both 22 and NN.

Constraints

  • 1≤N≤1091≤N≤109
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

NN

Output

Print the minimum positive integer divisible by both 22 and NN.


Sample Input 1 Copy

Copy
3

Sample Output 1 Copy

Copy
6

66 is divisible by both 22 and 33. Also, there is no positive integer less than 66 that is divisible by both 22 and 33. Thus, the answer is 66.


Sample Input 2 Copy

Copy
10

Sample Output 2 Copy

Copy
10

Sample Input 3 Copy

Copy
999999999

Sample Output 3 Copy

Copy
1999999998
代码:
import java.util.*;

public class Main {

    public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if(n % 2 == 1)n *= 2;
System.out.println(n);
}
}
B - Maximum Difference

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 200200 points

Problem Statement

You are given an integer sequence AA of length NN. Find the maximum absolute difference of two elements (with different indices) in AA.

Constraints

  • 2≤N≤1002≤N≤100
  • 1≤Ai≤1091≤Ai≤109
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

NN
A1A1 A2A2 ...... ANAN

Output

Print the maximum absolute difference of two elements (with different indices) in AA.


Sample Input 1 Copy

Copy
4
1 4 6 3

Sample Output 1 Copy

Copy
5

The maximum absolute difference of two elements is A3−A1=6−1=5A3−A1=6−1=5.


Sample Input 2 Copy

Copy
2
1000000000 1

Sample Output 2 Copy

Copy
999999999

Sample Input 3 Copy

Copy
5
1 1 1 1 1

Sample Output 3 Copy

Copy
0
代码:
import java.util.*;

public class Main {

    public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int max = 0,min = 1000000000;
for(int i = 0;i < n;i ++) {
int d = in.nextInt();
max = Math.max(max, d);
min = Math.min(min, d);
}
System.out.println(max - min);
}
}
C - Linear Approximation

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 300300 points

Problem Statement

Snuke has an integer sequence AA of length NN.

He will freely choose an integer bb. Here, he will get sad if AiAi and b+ib+i are far from each other. More specifically, the sadness of Snuke is calculated as follows:

  • abs(A1−(b+1))+abs(A2−(b+2))+...+abs(AN−(b+N))abs(A1−(b+1))+abs(A2−(b+2))+...+abs(AN−(b+N))

Here, abs(x)abs(x) is a function that returns the absolute value of xx.

Find the minimum possible sadness of Snuke.

Constraints

  • 1≤N≤2×1051≤N≤2×105
  • 1≤Ai≤1091≤Ai≤109
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

NN
A1A1 A2A2 ...... ANAN

Output

Print the minimum possible sadness of Snuke.


Sample Input 1 Copy

Copy
5
2 2 3 5 5

Sample Output 1 Copy

Copy
2

If we choose b=0b=0, the sadness of Snuke would be abs(2−(0+1))+abs(2−(0+2))+abs(3−(0+3))+abs(5−(0+4))+abs(5−(0+5))=2abs(2−(0+1))+abs(2−(0+2))+abs(3−(0+3))+abs(5−(0+4))+abs(5−(0+5))=2. Any choice of bb does not make the sadness of Snuke less than 22, so the answer is 22.


Sample Input 2 Copy

Copy
9
1 2 3 4 5 6 7 8 9

Sample Output 2 Copy

Copy
0

Sample Input 3 Copy

Copy
6
6 5 4 3 2 1

Sample Output 3 Copy

Copy
18

Sample Input 4 Copy

Copy
7
1 1 1 1 2 3 4

Sample Output 4 Copy

Copy
6
先把所有的值减去对应下标的值,之后的序列是求都减去同一个值后,绝对值的和最小,那么就排序,找到中间位置的值,所有的数减去中间位置的值就可以了,中间位置的左边比他小,右边比他大,减去值后中间的变为0,左边的都增加,右边的豆腐减少,保证减少的小于等于增加的即可。
代码:
import java.util.*;

public class Main {

    public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int [] s = new int[n];
long d = 0;
for(int i = 0;i < n;i ++) {
s[i] = in.nextInt();
s[i] -= i + 1;
}
Arrays.sort(s);
for(int i = 0;i < n;i ++) {
d += Math.abs(s[i] - s[n / 2]);
}
System.out.println(d);
}
}
D - Equal Cut

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 600600 points

Problem Statement

Snuke has an integer sequence AA of length NN.

He will make three cuts in AA and divide it into four (non-empty) contiguous subsequences B,C,DB,C,D and EE. The positions of the cuts can be freely chosen.

Let P,Q,R,SP,Q,R,S be the sums of the elements in B,C,D,EB,C,D,E, respectively. Snuke is happier when the absolute difference of the maximum and the minimum among P,Q,R,SP,Q,R,S is smaller. Find the minimum possible absolute difference of the maximum and the minimum among P,Q,R,SP,Q,R,S.

Constraints

  • 4≤N≤2×1054≤N≤2×105
  • 1≤Ai≤1091≤Ai≤109
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

NN
A1A1 A2A2 ...... ANAN

Output

Find the minimum possible absolute difference of the maximum and the minimum among P,Q,R,SP,Q,R,S.


Sample Input 1 Copy

Copy
5
3 2 4 1 2

Sample Output 1 Copy

Copy
2

If we divide AA as B,C,D,E=(3),(2),(4),(1,2)B,C,D,E=(3),(2),(4),(1,2), then P=3,Q=2,R=4,S=1+2=3P=3,Q=2,R=4,S=1+2=3. Here, the maximum and the minimum among P,Q,R,SP,Q,R,Sare 44 and 22, with the absolute difference of 22. We cannot make the absolute difference of the maximum and the minimum less than 22, so the answer is 22.


Sample Input 2 Copy

Copy
10
10 71 84 33 6 47 23 25 52 64

Sample Output 2 Copy

Copy
36

Sample Input 3 Copy

Copy
7
1 2 3 1000000000 4 5 6

Sample Output 3 Copy

Copy
999999994
如果是排着去找这三个位置,是O(n^3)的,可以采用折半枚举的技巧,先找到第二个位置,然后两边各自分为两块,用l和r标记,两块的差距尽可能小即可,随着i的右移,lr只需要初始化一次,然后跟着移动即可,i的移动必然会打破原来的平衡,lr只能继续右移,不需要从最初端开始,不然仍然超时。
java代码:
import java.util.*;

public class Main {

    public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long [] s = new long[n + 1];
for(int i = 1;i <= n;i ++) {
s[i] = in.nextLong();
s[i] += s[i - 1];
}
int l = 1,r = 3;
long ans = s[n];
for(int i = 2;i < n - 1;i ++) {
long last = s[n];
while(l < i) {
long d = Math.abs(s[i] - s[l] * 2);
if(d > last) break;
else last = d;
l ++;
}
l --;
last = s[n];
while(r < n) {
long d = Math.abs(s[n] + s[i] - s[r] * 2);
if(d > last) break;
else last = d;
r ++;
}
r --;
long max = Math.max(Math.max(Math.max(s[l], s[i] - s[l]), s[r] - s[i]), s[n] - s[r]);
long min = Math.min(Math.min(Math.min(s[l], s[i] - s[l]), s[r] - s[i]), s[n] - s[r]);
ans = Math.min(max - min, ans);
}
System.out.println(ans);
}
}

c++代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define Max 200005
using namespace std;
typedef long long LL;
int main() {
int n;
int a[Max];
LL sum[Max] = {};
scanf("%d",&n);
for(int i = ;i <= n;i ++) {
scanf("%d",&a[i]);
sum[i] = sum[i - ] + a[i];
}
LL ans = sum[n];
int l = ,r = ;
for(int i = ;i <= n - ;i ++) {
LL last = sum[n];
while(l < i) {
LL d = abs(sum[i] - sum[l] * );
if(d > last) break;
else last = d;
l ++;
}
l --;
last = sum[n];
while(r < n) {
LL d = abs(sum[n] + sum[i] - sum[r] * );
if(d > last) break;
else last = d;
r ++;
}
r --;
LL up = max(max(max(sum[l],sum[i] - sum[l]),sum[r] - sum[i]),sum[n] - sum[r]);
LL down = min(min(min(sum[l],sum[i] - sum[l]),sum[r] - sum[i]),sum[n] - sum[r]);
ans = min(ans,up - down);
}
printf("%lld",ans);
}

AtCoder Beginner Contest 102的更多相关文章

  1. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

  2. AtCoder Beginner Contest 100 2018/06/16

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

  3. AtCoder Beginner Contest 052

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

  4. AtCoder Beginner Contest 053 ABCD题

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

  5. AtCoder Beginner Contest 136

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

  6. AtCoder Beginner Contest 137 F

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

  7. AtCoder Beginner Contest 076

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

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

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

  9. AtCoder Beginner Contest 064 D - Insertion

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

随机推荐

  1. BZOJ 1293 SCOI2009 生日礼物 堆

    题目大意:给定一个数轴上n个点,每一个点有一种颜色,一共k种颜色.求一个最短的区间,包括全部k种颜色 卡了一段时间0.0 一開始想二分答案啥的 后来发现数据范围太大写不了0.0 后来去找题解才发现尼玛 ...

  2. cartographer Ubuntu16.04 ros环境配置

    首先要正确安装 ROS ,然后第12步应注意,proto的版本是个关键容易出错.   1.添加ROS源http:/packages.ros.org/ros/ubuntu xenial main   ( ...

  3. centOS 7中上网以及网卡的一些设置

    在VMWare中安装LinuxOS是个非经常见的事情. 可是,关于虚拟机的上网问题.想在这里总结一下,里面还有不懂的问题.希望能够得到前辈的解惑. 一.VMWare网卡的设置的三种选项: Bridge ...

  4. Cocos2d-x粒子系统

    CCparticleSystem类封装实现对粒子的控制与调度,当中操作包含有: 1.产生粒子 2.更新粒子状态 3.回收无效的粒子 CCparticleSystem派生出CCParticleSyste ...

  5. virtualbox 4.3.10 ubuntu 12.04 mount share folder bug

    virtualbox 4.3.10 不能mount共享文件夹,这是一个bug,参考如下链接 https://www.virtualbox.org/ticket/12879 执行以下命令即可:sudo ...

  6. 输入一个n,输出2到n的详细素数值

    #include<stdio.h> #include<algorithm> #include<cmath> int judge(int a) { int j; fo ...

  7. [项目构建 十一]babasport 购物车的原理及实现.

    今天来开始写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品, ...

  8. python 基础 1.5 python数据类型(三)--元组

    一.python的数据类型 序列--元组 1.序列 1>字符串,列表,元组都是序列. 2>序列的两个特点是索引操作符和切片操作符 索引操作符:我们可以从序列中抓取一个特定项目 切片操作符: ...

  9. ArcGIS api for js OverviewMap(鹰眼/概览图)

    说明.本篇博客中主要介绍 地图显示在某个div情况 1.运行效果 2.HTML <!DOCTYPE html> <html> <head> <meta htt ...

  10. 新版本ADT创建Android项目无法自动生成R文件解决办法

    本人使用的是ADT是Version 23.0.2,支持Android 6.0之后的系统环境,最高版本23,在创建Android项目的时候,每次创建项目选择“Compile With”低于6.0版本的时 ...