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. 哈尔滨工程大学ACM预热赛(A,C,H,I)

    A: 链接:https://ac.nowcoder.com/acm/contest/554/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言655 ...

  2. 大数据实操3 - hadoop集群添加新节点

    hadoop集群支持动态扩展,不需要停止原有集群节点就可以实现新节点的加入. 我是使用docker搭建的进群环境,制作了镜像文件,这里以我的工作基础为例子介绍集群中添加集群的方法 一.制作一个新节点 ...

  3. webpack简笔(1)

    1.npm init -> 生成package.json文件 2.npm install webpack --save-dev (不建议全局安装 ,会锁定版本) [ --save-dev 开发环 ...

  4. 20-matlab全排列-函数调用

    matlab中global的用法 Matlab 中子函数不传参直接调用主函数global变量方法  在一个m文件里要调用一个函数(自定义的),但是我希望这个函数能利用并修改workspace中的变量( ...

  5. java调用本地播放器播放视频文件。调用本地播放器不能播放指定文件的说明。

    public class OpenExe extends HttpServlet { //打开本地播放器并播放视频 public static void openExe(String file) { ...

  6. Solidity-让合约地址 接受ETH的转账充值的 三种方式

    以太坊智能合约开发:让合约接受转账 在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢? 有三种方式: 部署合约时转账 调用合约提供的方法 直接向合约地址进 ...

  7. Mysql必知必会 第三章 使用Mysql

    第三章 使用Mysql SQL语句和大小写 请注意,SQL语句不区分大小写,因此SELECT与select是相同的.同样,写成Select也没有关系.许多SQL开发人员喜欢对所有SQL关键字使用大写, ...

  8. SystemUI中监听app启动,修改app中的状态栏背景色

    参考 http://www.2cto.com/kf/201206/137225.html 从Android4.4开始,app可以自定义status bar 背景. 对于一些第三方app定义的状态栏背景 ...

  9. oracle 12c centos 7 安装配置

    1,安装centos 7 安装 宿主机配置信息: 内存:8G 系统盘:30G swap分区:30G (笑了oracle安装自检不过) /u01(50G) :oracle安装目录 /u02(50G): ...

  10. 快速排序——JavaScript实现

    基本原理: 1.从一个数组中任意挑选一个元素作为中轴元素: 2.将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边: 3.以当前中轴元素的 ...