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)的更多相关文章

  1. 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= ...

  2. 【Codeforces Round #421 (Div. 2) B】Mister B and Angle in Polygon

    [题目链接]:http://codeforces.com/contest/820/problem/B [题意] 给你一个正n边形; 然后让你在这正n边行中选3个点,组成一个角; 找出角的大小和所给的角 ...

  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页 ...

  4. Codeforces Round #421 (Div. 2) - B

    题目链接:http://codeforces.com/contest/820/problem/B 题意:给定一个正n边形,然后让你选择3个不同的顶点,使得这3个顶点形成的角度尽可能的接近a. 思路:首 ...

  5. Codeforces Round #421 (Div. 2) - A

    题目链接:http://codeforces.com/contest/820/problem/A 题意:一个人在看一本书,书一共C页,这个人每天看v0页,但是他又开始加速看这本书,每天都比前一天多看a ...

  6. 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)的左 ...

  7. 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 ...

  8. Codeforces Round #421 (Div. 1) (BC)

    1. 819B Mister B and PR Shifts 大意: 给定排列$p$, 定义排列$p$的特征值为$\sum |p_i-i|$, 可以循环右移任意位, 求最小特征值和对应移动次数. 右移 ...

  9. 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 ...

随机推荐

  1. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

  2. jasper打印文件出现空白页面

    EG:打印文件结果打印出一片空白 原因:使用了null的数据源而不是JREmptyDataSource 以下为正确代码 public <T> List<JasperPrint> ...

  3. Codeforces Round #491 (Div. 2)

    Codeforces Round #491 (Div. 2) https://codeforces.com/contest/991 A #include<bits/stdc++.h> us ...

  4. usb设备驱动的分析

    怎样来分析驱动程序呢? 1.将一个usb设备插入到电脑上,在串口软件上能够显示一些打印信息,用source insight软件打开linux内核2.6.22版本,然后从第一行查找通用的关键字,找到这一 ...

  5. 【c】多级指针

    一.一级指针 1.int *p,*p2; p是变量名,*表明是指针,指针指向地址. 在定义时初始化,如int *p_2 = &b; //定义一个指针,指针指向一个地址 先定义再初始化,如int ...

  6. java集合类,HashMap,ArrayList

    集合类 Collection LinkedList.ArrayList.HashSet是非线程安全的, Vector是线程安全的; ArrayXxx:底层数据结构是数组,连续存放,所以查询快,增删慢. ...

  7. mysql中文查询问题

    alter table t_foo change `str` `str` varchar(100) character set utf8 not null ;

  8. WebSocket入门及示例

    前言 一直在想要不要写下这篇,因为网上关于websocket的介绍和使用的好文实在太多太多,例如有这篇和这篇. 但我不管了,写下来,这样我就不用在想使用的时候总是去翻写过的源码了. 先回答几个简单的问 ...

  9. spring-boot的Hello World案例,最简单的spring-boot项目

    Spring Boot HelloWorld 一个功能: 浏览器发送hello请求,服务器接收请求并处理,响应Hello World字符串. 1.创建一个maven项目 2.导入依赖spring-bo ...

  10. centos7 安装mysql5.7.20(yum方式)

    windows下安装mysql请访问:windows下mysql5.7.20安装(zip包方式) 一.安装过程 1.安装wget yum install wget 2.查找yum源名称 在mysql官 ...