首页 > 其他分享 >P5051 [COCI2017-2018#7] Timo

P5051 [COCI2017-2018#7] Timo

时间:2023-09-08 09:44:16浏览次数:44  
标签:dots to2 COCI2017 P5051 long len int 2018 th

题目传送门

思路

由于题目给出的顺序是——

$1{th}\to2\to3{th}\to\dots\to(n-1)\to n^{th}$

$\to(n-1){th}\to(n-2)\to\dots\to2{th}\to1\to2^{th}$

因为我们每走一回在开头和结尾只走了一次,而其他位数则走了两次,这样的话我们再分组的时候就可以不按照 $1 \to \dots\to n$ 来执行而可以分为 $1 \to \dots\to n-1$ 和 $n \to\dots\to 2$ 两段,这样我们就可以有效的缓解首尾出现次数的问题,并且可以方便分解,这样的话我们就可以将每次循环的时间复杂度变为乘法即将 $O(\dfrac{m}{k})$ 变为 $O(n)$ 就可以有效的解决 TLE 的问题,然后剩下的数就纯暴力将他们填上。

AC code

这个代码有点长——

#include<bits/stdc++.h>
using namespace std;
#define int long long //用宏定义将 int 变为 long long 防止精度问题 
int len,n,k,m,flag,a[1000005];
signed main(){
	cin>>n>>k>>m;
	len=m/((n-1)*k);//判断数据的组数 
	m-=len*(n-1)*k;//算出多余的人数 
	if(len%2==1){//分奇数和偶数进行判断 
		for(int i=1;i<=n;i++){
			if(i==1) a[i]+=k*(len/2+1);//因为是奇数次,所以开头要比结尾多上一次 
			else if(i==n) a[i]+=k*(len/2);
			else a[i]+=k*len;
		}
		for(int i=n;i>=1;i--){
			a[i]+=min(m,k);
			m-=min(m,k);
			if(!m) break;//如果没有人了,就退出 
		}
	}
	else if(len%2==0){
		for(int i=1;i<=n;i++){
			if(i==1 || i==n) a[i]+=k*(len/2);//偶数次就说明开头与结尾出现的次数相同 
			else a[i]+=k*len;
		}
		for(int i=1;i<=n;i++){
			a[i]+=min(m,k);
			m-=min(m,k);
			if(!m) break;
		}
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	return 0;
} 

标签:dots,to2,COCI2017,P5051,long,len,int,2018,th
From: https://www.cnblogs.com/is-02/p/17686687.html

相关文章

  • 题解 [NOIP2018 提高组] 赛道修建
    题目链接挺综合的一道题目。询问最小值最大,考虑二分最小值,二分上下界是\([最小边权,树的直径]\),但是为了方便我们直接设为\([1,5\times10^8]\)即可。考虑如何\(check\),可以采用类似树形\(dp\)的方式进行贪心。对于节点\(u\)的子树,\(u\)内部的点显然可以构成几条链,同......
  • OpenSSH 用户枚举漏洞(CVE-2018-15473)【原理扫描】
    最烦做等保了!!!! 有没有同感的? 修复过程记录一下,为什么要记录呢,等保漏洞每次都是那些,我一直没有进行文档记录,导致我每次都要百度搜索解决。查看当前服务器openssh的版本#当前系统版本cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)ssh-vOpenSSH_7.4p1......
  • BUUCTF [BUUCTF 2018]Online Tool
    首先访问网站得到需要分析的代码<?phpif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_X_FORWARDED_FOR'];}if(!isset($_GET['host'])){highlight_file(__FILE__);}else{$hos......
  • 设置CITECT2018R2过程分析器趋势笔标签的底色和文字颜色
    这一篇我在新浪博客也记录过。这里再记录一遍。在前面练习的基础上,可以在每一个趋势笔设置语句中写下面的脚本hPen.TrendCursorLabelFillColor=255'标签填充颜色hPen.TrendCursorLabelTextColor=0 '标签文字颜色颜色数值遵循VB语言中RGB颜色计算的数值。......
  • 设置CITECT2018R2过程分析器游标的粗细和颜色
    这一篇在新浪博客发表过,这里再记录一遍,新浪博客地址CITECT2018R2过程分析器设置游标粗细和颜色_来自金沙江的小鱼_新浪博客(sina.com.cn)在前一个练习基础上设置一下游标的粗细和颜色,让其更加醒目。在过程分析器初始化脚本中设置游标位置添加后面设置游标粗细和颜色hCursor.w......
  • 【很难啊、拆分数、观察】P6944 [ICPC2018 WF] Gem Island
    简要题面:求\(n+d\)的\(n\)正整数拆分中,最大的\(r\)个数之和的期望。首先是典中典:KeyObservation:最后的形态\(a_1\toa_n\)的概率都是一样的。Proof:考虑组合数\(\binom{d}{a_1-1,a_2-1.....,a_n-1}\)。然后我们每次在每一个\(a_i-1\)每次分裂有......
  • 「突刺贯穿第二分块」P4117 [Ynoi2018] 五彩斑斓的世界
    很帅气!分块在线转离线,考虑每个块对于询问的贡献。维护块的max和tag分别代表最大值和减了多少。先考虑整块,\(max<2*x:\)每次暴力区间平移即可。否则对于\([1,x]\)全部加上\(x\)平移到\([x+1,x*2]\),然后区间整体减\(x\)即可。散块怎么做?暴力减,然后重构块......
  • 2018 ACM-ICPC 亚洲青岛区域网络赛
    A.LiveLove#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;voidsolve(){intn,m;cin>>n>>m;cout<<m<<''<<n/(n-m+1)<<'\n';}int......
  • citect2018R2过程分析器趋势笔标签加上工程单位显示
    这两天在家里学习练习了CITECT2018R2上过程分析器趋势笔标签上显示出工程单位,在新浪博客记录过一次,在这里也记录一下。建立一个unity程序,有两个变量,分别是流量和浓度,建立的过程不在这里记录。新建citect2018R2项目,配置IO设备指向unity模拟器,建立变量和趋势变量,过程也不在这里记录......
  • P8675 [蓝桥杯 2018 国 B] 搭积木 题解
    总述此题用区间dp解决,二维前缀和优化。朴素做法阶段:自上而下数每一层。状态:\(dp_{i,l,r}\)表示自上而下数第\(i\)行中在\([l,r]\)摆积木的方案数。状态转移方程:根据题意可知,若要在\([l,r]\)中摆积木,那么\([l,r]\)中不允许有\(\tt{X}\),而第\(i\)层的\([l,r]\)......