A. Pizza Separation
来源:互联网 发布:究极风暴4优化补丁1.5 编辑:程序博客网 时间:2024/05/16 19:42
题解
[codeforce-895A 转载] https://www.cnblogs.com/Roni-i/p/7903036.html
将圆分为连续的两块使其差最小。前缀和或者数组模拟 。
A. Pizza Separation time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output
Students Vasya and Petya are studying at the BSU (Byteland State University). At one of the breaks they decided to order a pizza. In this problem pizza is a circle of some radius. The pizza was delivered already cut intonpieces. Thei-th piece is a sector of angle equal toai. Vasya and Petya want to divide all pieces of pizza into twocontinuoussectors in such way that the difference between angles of these sectors is minimal. Sector angle is sum of angles of all pieces in it. Pay attention, that one of sectors can be empty.
Input
The first line contains one integern(1 ≤n≤ 360) — the number of pieces into which the delivered pizza was cut.
The second line containsnintegersai(1 ≤ai≤ 360) — the angles of the sectors into which the pizza was cut. The sum of allaiis 360.
Output
Print one integer — the minimal difference between angles of sectors that will go to Vasya and Petya.
Examples
input
4
90 90 90 90
output
0
input
3
100 100 160
output
40
input
1
360
output
360
input
4
170 30 150 10
output
0
Note
In first sample Vasya can take1and2pieces, Petya can take3and4pieces. Then the answer is|(90 + 90) - (90 + 90)| = 0.
In third sample there is only one piece of pizza that can be taken by only one from Vasya and Petya. So the answer is|360 - 0| = 360.
In fourth sample Vasya can take1and4pieces, then Petya will take2and3pieces. So the answer is|(170 + 10) - (30 + 150)| = 0.
Picture explaning fourth sample:
Both red and green sectors consist of two adjacent pieces of pizza. So Vasya can take green sector, then Petya will take red sector.
前缀和:
#include <bits/stdc++.h>using namespace std;int a[400],sum[400];int main(){ int n; int ans=360; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); sum[i]=a[i]+sum[i-1]; } for(int i=0;i<n;i++) { for(int j=i;j<n;j++)//t-(360-t)=2*t-360,t为区间所取值,因为是连续区间并且区间可以为空,3个for枚举t或者前缀和或者尺取 { ans=min(ans,abs(2*(sum[j]-sum[i-1])-360)); } } cout<<ans<<endl; return 0;}
数组模拟:
#include <bits/stdc++.h>using namespace std;int a[1000],sum;//环的话 数组起码2倍大int main(){ int n; int ans=360; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); a[i+n]=a[i]; } for(int i=0;i<n;i++) { sum=0; //注意置0的位置 for(int j=i;j<i+n;j++) { sum+=a[j]; ans=min(ans,abs( 2*sum-360) ); } } cout<<ans<<endl; return 0;}/*输入数据直接复制了一遍放到后面,然后枚举拿的起点i,拿的终点j。然后计算拿了多少,差值是多少。*/
- codeforces A. Pizza Separation
- A. Pizza Separation
- #448 div2 a Pizza Separation
- CF-448(Div.2)-A. Pizza Separation
- codeforces #448(div 2) A. Pizza Separation
- Codeforces Round #448 (Div. 2) A. Pizza Separation 前缀和
- Codeforces Round #448 (Div. 2) A. Pizza Separation
- Codeforces Round #448 (Div. 2) 895A. Pizza Separation
- Codeforces895A. Pizza Separation
- Pizza Separation CodeForces
- cfA. Pizza Separation(前缀和)
- 一种枚举指定序列的方法 ————CF A. Pizza Separation
- PIZZA
- part-time、music lover、have a pizza、be respectful to
- D-Separation
- Logging separation
- zjoj_4551_Even separation
- 内部比赛 A Alfredo\'s Pizza Res…
- Debian 9 Wifi 配置
- 《算法导论》个人笔记(一)
- Android px dpi dp sp 最简单的解释
- 深入理解 Tomcat(五)源码剖析Tomcat 启动过程----类加载过程
- 深入理解 Tomcat(六)源码剖析Tomcat 启动过程----生命周期和容器组件
- A. Pizza Separation
- B
- 深入理解 Tomcat(七)源码剖析 Tomcat 完整启动过程
- Android沉浸式(侵入式)标题栏(状态栏)Status(三)
- SQL零起点(GETTING STARTED WITH SQL)翻译前言
- 深入理解 Tomcat(八)源码剖析之连接器
- 深入理解 Tomcat(九)源码剖析之请求过程
- 深入理解 Tomcat(十) 总结
- SQL Server 登录(local) 失败