Codeforces 610B Vika and Squares 【计数 数学基础】
2016-01-01 18:41
507 查看
B. Vika and Squares
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Vika has n jars with paints of distinct colors. All the jars are numbered from 1 to n and
the i-th jar contains ai liters
of paint of color i.
Vika also has an infinitely long rectangular piece of paper of width 1, consisting of squares of size 1 × 1.
Squares are numbered 1, 2, 3and
so on. Vika decided that she will start painting squares one by one from left to right, starting from the square number 1 and some arbitrary
color. If the square was painted in color x, then the next square will be painted in color x + 1.
In case of x = n, next square is painted in color 1.
If there is no more paint of the color Vika wants to use now, then she stops.
Square is always painted in only one color, and it takes exactly 1 liter of paint. Your task is to calculate the maximum number of squares that
might be painted, if Vika chooses right color to paint the first square.
Input
The first line of the input contains a single integer n (1 ≤ n ≤ 200 000) —
the number of jars with colors Vika has.
The second line of the input contains a sequence of integers a1, a2, ..., an (1 ≤ ai ≤ 109),
where ai is
equal to the number of liters of paint in the i-th jar, i.e. the number of liters of color i that
Vika has.
Output
The only line of the output should contain a single integer — the maximum number of squares that Vika can paint if she follows the rules described above.
Sample test(s)
input
output
input
output
input
output
Note
In the first sample the best strategy is to start painting using color 4. Then the squares will be painted in the following colors (from left
to right): 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5.
In the second sample Vika can start to paint using any color.
In the third sample Vika should start painting using color number 5.
题意:给定n种颜料以及每种颜料的数量。涂色原则1,相邻颜色不同;2,若第i块涂颜料x,那么i+1块涂颜料x+1(n的话涂1)。问你最多可以涂多少块。
思路:首先求整体循环数即所有颜料数量最小的Min,全减去后求最长连续的非0段len。结果就是Min * n + len。
AC代码:注意左右端点,还有数据会爆int
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Vika has n jars with paints of distinct colors. All the jars are numbered from 1 to n and
the i-th jar contains ai liters
of paint of color i.
Vika also has an infinitely long rectangular piece of paper of width 1, consisting of squares of size 1 × 1.
Squares are numbered 1, 2, 3and
so on. Vika decided that she will start painting squares one by one from left to right, starting from the square number 1 and some arbitrary
color. If the square was painted in color x, then the next square will be painted in color x + 1.
In case of x = n, next square is painted in color 1.
If there is no more paint of the color Vika wants to use now, then she stops.
Square is always painted in only one color, and it takes exactly 1 liter of paint. Your task is to calculate the maximum number of squares that
might be painted, if Vika chooses right color to paint the first square.
Input
The first line of the input contains a single integer n (1 ≤ n ≤ 200 000) —
the number of jars with colors Vika has.
The second line of the input contains a sequence of integers a1, a2, ..., an (1 ≤ ai ≤ 109),
where ai is
equal to the number of liters of paint in the i-th jar, i.e. the number of liters of color i that
Vika has.
Output
The only line of the output should contain a single integer — the maximum number of squares that Vika can paint if she follows the rules described above.
Sample test(s)
input
5 2 4 2 3 3
output
12
input
3 5 5 5
output
15
input
6 10 10 10 1 10 10
output
11
Note
In the first sample the best strategy is to start painting using color 4. Then the squares will be painted in the following colors (from left
to right): 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5.
In the second sample Vika can start to paint using any color.
In the third sample Vika should start painting using color number 5.
题意:给定n种颜料以及每种颜料的数量。涂色原则1,相邻颜色不同;2,若第i块涂颜料x,那么i+1块涂颜料x+1(n的话涂1)。问你最多可以涂多少块。
思路:首先求整体循环数即所有颜料数量最小的Min,全减去后求最长连续的非0段len。结果就是Min * n + len。
AC代码:注意左右端点,还有数据会爆int
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <queue> #include <stack> #include <map> #include <set> #include <vector> #include <string> #define INF 0x3f3f3f3f #define eps 1e-8 #define MAXN (200000+10) #define MAXM (500000) #define Ri(a) scanf("%d", &a) #define Rl(a) scanf("%lld", &a) #define Rf(a) scanf("%lf", &a) #define Rs(a) scanf("%s", a) #define Pi(a) printf("%d\n", (a)) #define Pf(a) printf("%.2lf\n", (a)) #define Pl(a) printf("%lld\n", (a)) #define Ps(a) printf("%s\n", (a)) #define W(a) while(a--) #define CLR(a, b) memset(a, (b), sizeof(a)) #define MOD 1000000007 #define LL long long #define lson o<<1, l, mid #define rson o<<1|1, mid+1, r #define ll o<<1 #define rr o<<1|1 #define PI acos(-1.0) using namespace std; int a[MAXN]; int main() { int n; Ri(n); LL ans = 0; int Min = INF; for(int i = 0; i < n; i++) { Ri(a[i]); Min = min(Min, a[i]); } ans = 1LL * Min * n; int len = 0, temp = 0; for(int i = 0; i < n; i++) { a[i] -= Min; if(a[i] == 0) { if(len) temp = max(temp, len); len = 0; } else len++; } if(len) temp = max(temp, len); int num = 0, i = 0; while(a[i] && i < n) i++, num++; i = n-1; while(a[i] && i >= 0) i--, num++; temp = max(temp, num); Pl(ans + temp); return 0; }
相关文章推荐
- Codeforces 610A Pasha and Stick 【水题】
- oracle数据库文件系统迁移到ASM
- Servlet中文乱码处理
- 设计模式之二十三:解释器模式
- JavaScript Uncaught SyntaxError: Unexpected token )(…)
- Android--WebView 自适应代码
- 下载UltraEdit UE 破解版方法
- File类3 文件读取
- oracle linux6操作系统oracle11.2.0.4数据库从一台主机A(ora11g)到另一台主机B(ora02)的迁移过程
- char字节数、char与byte、byte数组合并 Java
- Android--监听View的两个指头是放大和缩小
- Laplace变换性质
- Laplace变换性质
- Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字
- Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字
- Animation.Sample用法介绍
- hibernate 简单入门 配置
- 全屏Dialog实现方法
- java发送内嵌图片邮件
- Hadoop历史服务器详解