AtCoder Beginner Contest 102
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
3
Sample Output 1 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
10
Sample Output 2 Copy
10
Sample Input 3 Copy
999999999
Sample Output 3 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
4
1 4 6 3
Sample Output 1 Copy
5
The maximum absolute difference of two elements is A3−A1=6−1=5A3−A1=6−1=5.
Sample Input 2 Copy
2
1000000000 1
Sample Output 2 Copy
999999999
Sample Input 3 Copy
5
1 1 1 1 1
Sample Output 3 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
5
2 2 3 5 5
Sample Output 1 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
9
1 2 3 4 5 6 7 8 9
Sample Output 2 Copy
0
Sample Input 3 Copy
6
6 5 4 3 2 1
Sample Output 3 Copy
18
Sample Input 4 Copy
7
1 1 1 1 2 3 4
Sample Output 4 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
5
3 2 4 1 2
Sample Output 1 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
10
10 71 84 33 6 47 23 25 52 64
Sample Output 2 Copy
36
Sample Input 3 Copy
7
1 2 3 1000000000 4 5 6
Sample Output 3 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的更多相关文章
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
随机推荐
- Qt4.8.5配置相关问题
空余时间想看看Qt,在安装和编译过程中遇到了一些值得记录的东西,总结一下. (一)安装 1.先安装编译环境qt-creator-win-opensource-3.0.0.exe.使用默认路径C:\Qt ...
- jQuery--基础(操作标签)
jQuery-样式操作 .css() 可以直接使用来获取css的值 .css("color") 使用方法,如果想给查找到的标签添加样式: .css("colo ...
- 深入浅出Attribute(二)
上篇里,我们把Attribute“粘”在类的成员方法上show了一把,让Attribute跟大家混了个脸儿熟.中篇里,我们将探讨“究竟什么是Attribute”和“如何创建及使用Attribute”这 ...
- HDFS源码分析数据块复制监控线程ReplicationMonitor(一)
ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列.其定义及作为线程核心的run()方法如下: ...
- CentOS 6.9上安装Mysql 5.7.18 安装
CentOS 6.9上安装Mysql 5.7.18 安装 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-g ...
- 【转】android 签名验证防止重打包
网上资料很多,这里只做一个笔记反编译 dex 修改重新打包签名后 apk 的签名信息肯定会改变,所以可以在代码中判断签名信息是否被改变过,如果签名不一致就退出程序,以防止 apk 被重新打包. 1 j ...
- 【BZOJ4519】[Cqoi2016]不同的最小割 最小割树
[BZOJ4519][Cqoi2016]不同的最小割 Description 学过图论的同学都知道最小割的概念:对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分 ...
- Spring Boot:Thymeleaf篇
Spring Boot干货系列:(四)Thymeleaf篇http://www.cnblogs.com/zheting/p/6707037.html 前言 Web开发是我们平时开发中至关重要的,这里就 ...
- Channel (digital image) 通道 色彩深度 Color_depth
en.wikipedia.org/wiki/Channel_(digital_image) Color digital images are made of pixels, and pixels ar ...
- Swift 学习笔记(扩展和泛型)
在开始介绍Swift中的扩展之前,我们先来回忆一下OC中的扩展. 在OC中如果我们想对一个类进行功能的扩充,我们会怎么做呢. 对于面向对象编程的话,首先会想到继承,但是继承有两个问题. 第一个问题:继 ...