Codeforces Round #421 (Div. 2)
A:
题意:给你一本书共c页,第一天看v0页,第二天看v0+a,第二天看v0+2a以此类推,每天最多看v1页,但是后一天要重复看前一天的后l页。
代码:
#include<stdio.h>
using namespace std;
int c,v0,v1,a,l;
int main()
{
while(~scanf("%d%d%d%d%d",&c,&v0,&v1,&a,&l))
{
int sum=v0;
int k=1;
while(sum<c)
{
sum-=l;
int cc=v0+k*a;
if(cc>v1)
cc=v1;
sum+=cc;
k++;
}
printf("%d\n",k);
}
return 0;
}
B:
题意:
题意是给你一个正n边形,正多边形每两个顶点连成线。给你一个角度a,问哪三个顶点构成的角度最接近a,输出这个三个顶点的序号。
思路:每个顶点处内角度数:(n-2)*180/n。若n为偶数的时候,那一顶点处被划分的几个小角度数为((180-t)/2)相同的;若n为奇数,那顶点处被划分的角度数为(t-(n/2-1)*(180-t)),除了中间那个角以外的角度是相同的度数为((180-t)/2)。为什么是这样的?画图见分晓!
这题只要输出的适合解就可以了,所以你可以固定前两个顶点为1,2,去找合适的第三个顶点。
代码:
#include<stdio.h>
#include<algorithm>
#define Inf 1<<29
using namespace std;
int n;
double a,z;
int main()
{
while(~scanf("%d%lf",&n,&a))
{
double t=(n-2)*180.0/n;
double x=Inf;
int y=0;
double c=(180-t)/2;
double cc=t-(n/2-1)*2*c;
for(int i=1; i<=n-2; i++)
{
if(t>a)
z=t-a;
else
z=a-t;
if(z<x)
{
x=z;
y=i+2;
}
if(n%2==1&&i==n/2)
t-=cc;
else
t-=c;
}
printf("1 2 %d\n",y);
}
return 0;
}
D:
题意:就是给你一个序列p[1]~p[n],每次把这个序列的最后一个数放在最前面,这样依次寻找最小的
,并输出。
思路:需要一个数组来动态记录a[i]-i<=0的个数,p[i]就表示移动i个位置后有多少个a[i]-i<=0。
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define ll long long
const int maxn=1000010;
using namespace std;
int n;
int a[maxn];
int b[maxn];
int main()
{
while(~scanf("%d",&n))
{
ll sum=0;
memset(b,0,sizeof(b));
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
sum+=abs(a[i]-i);
if(a[i]-i<=0)
b[0]++;
else
b[a[i]-i]++;//因为若t=a[i]-i,往后移动序号每次增加1,那么至少需要移动t次才使得a[i]-i<=0
}
ll ans=sum;
ll cnt=b[0];//一开始是移动0次
int tt=0;
for(int i=1; i<n; i++)
{
int t=n-i+1;
if(a[t]-n<=0)//表示最后一个需要移动到最前的点,如果这个点对应的a[i]-i是负数,cnt--,因为你要找前面的,cnt表示的是所有的
cnt--;
if(a[t]-t<=0)//最后一个需要移动到最前的点,状态应该还原,就是原加了的就减去
b[0]--;
else
b[a[t]-t]--;
b[min(a[t]+i-1,maxn-10)]++;//最后一个需要移动到最前的点,移动之后造成的影响要更新,当前这个点已经移动了i个位置,但是从最后移动到最前差值为a[t]-1需要移动a[t]-1个位置才使得a[i]-i==0,则共需要移动a[t]-1+i个位置,那么p[a[n]-1+i]对应的值加一
sum+=cnt;//加上前面a[i]-i<=0的数往后移一位的变化值
sum-=(n-cnt-1);//减去前面a[i]-i>0的数往后移一位的变化值
sum-=abs(a[t]-n);//减去移动前最后一个点对应abs(a[i]-i)
sum+=abs(a[t]-1);//加上移动后第一个点对应的abs(a[i]-i)
cnt+=b[i];
if(sum<ans)
{
ans=sum;
tt=i;
}
}
printf("%lld %d\n",ans,tt);
}
return 0;
}
Codeforces Round #421 (Div. 2)的更多相关文章
- Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts
Codeforces Round #421 (Div. 2) D. Mister B and PR Shifts 题意:给一个长度为\(n\)的排列,每次可以向右循环移位一次,计算\(\sum_{i= ...
- 【Codeforces Round #421 (Div. 2) B】Mister B and Angle in Polygon
[题目链接]:http://codeforces.com/contest/820/problem/B [题意] 给你一个正n边形; 然后让你在这正n边行中选3个点,组成一个角; 找出角的大小和所给的角 ...
- 【Codeforces Round #421 (Div. 2) A】Mister B and Book Reading
[题目链接]:http://codeforces.com/contest/820/problem/A [题意] 每天看书能看v页; 且这个v每天能增加a; 但是v有上限v1; 然后每天还必须往回看t页 ...
- Codeforces Round #421 (Div. 2) - B
题目链接:http://codeforces.com/contest/820/problem/B 题意:给定一个正n边形,然后让你选择3个不同的顶点,使得这3个顶点形成的角度尽可能的接近a. 思路:首 ...
- Codeforces Round #421 (Div. 2) - A
题目链接:http://codeforces.com/contest/820/problem/A 题意:一个人在看一本书,书一共C页,这个人每天看v0页,但是他又开始加速看这本书,每天都比前一天多看a ...
- Codeforces Round #421 (Div. 2)D - Mister B and PR Shifts(模拟)
传送门 题意 给出n个数,计算在进行n-1次右移中\(min\sum_{i=1}^nabs(p_i-i)\) 分析 我们设置cnt[p[i]-i]为一个数p[i]与它标准位置(如1的标准位置为1)的左 ...
- Codeforces Round #421 (Div. 2)B. Mister B and Angle in Polygon(模拟+精度控制)
传送门 题意 给出正n多边形和一个数a,寻找与a最接近的角,输出角编号 分析 找出多边形上所有角,一一比对即可 trick 1.判断的时候注意精度,i.e.x-eps>0 2.double与do ...
- Codeforces Round #421 (Div. 1) (BC)
1. 819B Mister B and PR Shifts 大意: 给定排列$p$, 定义排列$p$的特征值为$\sum |p_i-i|$, 可以循环右移任意位, 求最小特征值和对应移动次数. 右移 ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
随机推荐
- css3+html5特效-向上滑动
css+html5特效-向上滑动 效果描述:切换的下拉和上拉状态 鼠标悬浮:下拉鼠标离开:上拉 /*外容器设置*/ .box1{position:relative;top:100px;left:100 ...
- Android 代码判断是否有网络
public void okGo() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemServic ...
- JS-正则表达式 限制输入整数、小数
//只可以输入整数 onkeyup="value=value.replace(/[^\d]/g,'')" //可以输入数字 包括小数 onkeyup="value=val ...
- Spring常用注解总结(2)
@Autowired "自动填装",作用是为了消除代码JAVA代码里面的getter/setter与bean属性中的property. @Autowired默认按类型匹配的方式,在 ...
- 【转】.NET程序员提高效率的70多个开发工具
原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...
- IDEA 上 Tigase8.0 源代码编译运行
Tigase交流群 :310790965 一些小伙伴们经常问Tigase8 check下来的源代码怎么跑起来,因为我不能及时一 一回答,所以还是写个博文来演示一下吧,一般针对新手而言,老手的话,就跳过 ...
- 配置Linux客户端使用socks5代理上网
配置Linux客户端使用socks5代理上网 背景 有访问google或者其他海外网站需求的同学可能大都用过或者听过ss,在Windows.Mac.Android.IOS都有现成可用的客户端来协助 ...
- debian9使用国内源安装docker以及一些使用方法
debian9使用国内源安装docker以及一些使用方法 首先, 我的环境是debian, 容器是centos debian 扔源 # deb-src [arch=amd64] https://m ...
- 使用DOS命令无法启动MySQL
今天使用命令dos 命令 net start mysql 启动mysql的使用出现以下情况 无法正常启动mysql服务. 原因是: 启动dos命令窗口时的用户权限太低,无法正常使用 解决办法: 搜索c ...
- Python学习心得--变量类型篇
1.Python允许同时为多个变量赋值.例如:a = b = c = 1 2.Python允许多个对象指定多个变量.例如:a1, b1, c1 = 1, 2, "john" 3.使 ...