CF1028E Restore Array 构造
正解:构造
解题报告:
是的灵巧还在写构造,,,不知道484我做题太慢的缘故我感觉我做了好久的构造了然而一半的题目都没做完QAQ
要哭出来了QAQ
然后说下这题的解法,开始花了这——么的时间也没有get,,,然后听psj又讲了遍才发现是我傻逼了,,,
这题的解法趴,大概是这样的
首先对于这种取余的,一般来说看到之后第一反应就要想到商=0或者商=1,这样比较好做
那这道题中是商=1,也就是说我们只要Ai=Ai+1+Bi
再加上这题是个环
看到环你难道没有断环为链的冲动嘛
所以就找一个i,然后一路按照我们刚才求的式子推过去就好了
那剩下的唯一一个问题就是,我们怎么保证推一圈推回来之后A依然是合法的呢
思考怎么样会是合法的鸭
只要保证Ai%Ai+1=Bi就成
显然从上面求的那个式子可以发现A是单调增的了
那就结果会是Ai+1是max然后Ai是min,那就Ai=Bi了
所以我们只要找一个地方断开,断开的值A就=B就好了
另外一个鸭,如果要合法就还要保证余数<=除数是趴
那我们怎么保证余数<=除数啊!
现在我们已经知道Ai=Bi并且Ai是min了
那只要Bi是max就成立辣!
好了那就做完了!只是剩几个细节交代一下
1) 如果Bi的前一个Bi-1也是max怎么办,那样就会导致余数=除数就非法了嘛
那我们就改一下变成i-1=i,好辣
那如果再往前推一个,就继续往前走
那如果Bi全部相等呢
那就不成立了嘛,比较显然?(唯一一个例外就是,B全部=0那就只要A全部相等就好辣!
2) 还有一个是,不想写了回家写咕咕咕
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rp(i,x,y) for(register ll i=x;i<=y;++i) const ll N=;
ll n,a[N],b[N],stp,nw; inline ll read()
{
char ch=getchar();ll x=;bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
} int main()
{
n=read();rp(i,,n){b[i]=read();if(b[i-]<b[i] && i!= && b[i]!=)stp=i;}if(b[n]<b[] && b[]!=)stp=;nw=stp-;a[stp]=b[stp];
if(!stp)
{
if(b[]==){printf("YES\n");rp(i,,n)printf("1 ");}
else printf("NO\n");
return ;
}
while(nw!=stp)
{if(nw<)nw=n,a[nw]=a[]+b[nw];else a[nw]=a[nw+]+b[nw];--nw;}
printf("YES\n");rp(i,,n)printf("%lld ",a[i]);
return ;
}
这儿是WA在了第五个点的代码QwQ
CF1028E Restore Array 构造的更多相关文章
- Codeforces 1028E Restore Array 构造
我发现我构造题真的不会写, 想了好久才想出来.. 我们先把n = 2, 所有数字相等, 所有数字等于0的都特判掉. 找到一个b[ i ] > b[ i - 1 ]的位置把它移到最后一个位置, 并 ...
- Codeforces Round #181 (Div. 2) A. Array 构造
A. Array 题目连接: http://www.codeforces.com/contest/300/problem/A Description Vitaly has an array of n ...
- CodeForces 404C Restore Graph (构造)
题意:让人构造一个图,满足每个结点边的数目不超过 k,然后给出每个结点到某个结点的最短距离. 析:很容易看出来如果可能的话,树是一定满足条件的,只要从头开始构造这棵树就好,中途超了int...找了好久 ...
- Codeforces 1028E. Restore Array
题目直通车:http://codeforces.com/problemset/problem/1028/E 解法:设原数组为ar[],求ar中的最大值的下标ins,依次向前遍历一遍,每一个答案值都为前 ...
- 原生JS:Array对象详解
Array对象 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ ...
- Object类型与Array类型
总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...
- C++ Built-In Array 的语义
C++ 编译花了大量精力使得class和原始类(primitive types)的用法一致.比如array的应用: A a[100]:// A is class int b[100]: 虽然a是用户定 ...
- 二 Array 数组常用操作方法
数组链接 Array 构造上的方法 一.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable) ...
- 07--STL序列容器(Array)
一:Array了解 array<T,N> 模板定义了一种相当于标准数组的容器类型.它是一个有 N 个 T 类型元素的固定序列.除了需要指定元素的类型和个数之外,它和常规数组没有太大的差别. ...
随机推荐
- 深入new/delete:Operator new的全局重载
Operator new 的全局重载 原文地址:http://blog.csdn.net/zhenjing/article/details/4354880 我们经常看到这么一句话: operator ...
- mui.back()返回刷新功能
使用场景:操作某个步骤需要获取用户信息,如果用户未登陆,则跳转登录页面,登陆成功之后使用mui.back()返回父页面,父页面必须刷新. 子页面:登陆页 父页面:跳转登录页的页面 1. 在子页面初始化 ...
- CString TCHAR互相转换
CString->TCHAR*的转化可以用函数GetBuffer() // 原型:LPTSTR GetBuffer( int nMinBufLength ); CString str(_T(&q ...
- linux,shell脚本中获取脚本的名字,使用脚本的名字。
需求描述: 写shell脚本的过程中,有时会需要获取脚本的名字,比如,有的时候,脚本 中会有usage()这种函数,可能就会用到脚本的名字. 实现方法: shell脚本中,通过使用$0就可以获取到脚本 ...
- electron-利用node开发桌面应用
简介 web前端语言的发展有目共睹, 从原来的pc web, 到后来的mobile SAP, 再到 nodejs,全站工程师应运而生. js快速而且稳健的发展让人不得不重视, 相应的前端开发人员的地位 ...
- java图形化Swing教程(一)
与多线程.泛型等不同,Swing主要在于使用. 以下主要放代码和凝视.少说话. (一)基本框架 package Swing; import java.awt.*; import javax.swing ...
- Python 字符串处理(转)
转自:黄聪:Python 字符串操作(替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) http://www.cnblogs.com/huangcong/archive/2011/ ...
- BigDecimal类(精度计算类)的加减乘除
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...
- 《C++ Primer Plus》第11章 使用类 学习笔记
本章介绍了定义和使用类的许多重要方面.一般来说,访问私有类成员的唯一方法是使用类方法.C++使用友元函数来避开这种限制.要让函数称为友元,需要在类声明中声明该函数,并在声明前加上关键字friend.C ...
- JS对象添加新的字段
var test={name:"name",age:"12"}; test.id = "12345"; 直接定义添加就成了