【Henu ACM Round#15 F】Arthur and Questions
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
a1+a2+...+aka1a2+a3+...+ak+1<a3+a4+...+ak+2
->a2<ak+2
类似还可以推出
a3<ak+3
a4<ak+4
...
则有
a1<ak+1<a2k+1<a3k+1...
a2<ak+2<a2k+2<a3k+2...
...
也就是每隔k个要是递增的。
你的任务就是维护每隔k个数字递增。
我们先考虑a[1],a[1+k],a[1+2k],a[1+3k]...这个序列。
枚举所有不是问号的位置i,j(i < j) 且i+1..j-1之间的位置都是问号。
①
首先判断i-j-1是否大于等于a[j]-a[i]-1
因为如果不满足,显然这i-j-1个位置没办法按最小的递增顺序放满。肯定会不是严格递增的。
因此直接输出无解
②
接下来要考虑绝对值最小这个约束.来代替各个问号。
如果a[i]>=0 且a[j]>=0
那么按a[i]+1,a[i]+2..顺序递增代替问号就好
a[i]<=0且a[j]<=0,就a[j]-(i-j-1),a[j]-(i-j-1)+1....顺序递增
a[i]<0且a[j]>0的话,就从0的两边交替选数字就好,取出0两边交替的数字的最小值\(-\frac{(i-j-1)}{2}\),然后递增代替问号就可以。
当然要大于a[i]且小于等于a[j]-(i-j-1)
15e8-(-15e8)会爆long long.....
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5;
const int INF = 105e7;
int n,k,a[N+10],b[N+10];
char s[20];
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
cin >> n >> k;
for (int i = 1;i <= n;i++) {
cin >> s;
if (s[0]=='?'){
a[i] = INF;
}else {
a[i] = atoi(s);
}
}
for (int i = n+1;i <= n+k;i++) a[i] = INF+1;
for (int i = 1;i <= k;i++){
int tot = 0,prev = -INF;
for (int j = i;j <= n+k;j+=k)
if (a[j]==INF){
tot++;
}else{
if (a[j]- prev-1<tot){
return cout<<"Incorrect sequence"<<endl,0;
}
int s;
if (prev>=0)
s = prev+1;
else if (a[j]<=0) s = a[j]-tot;
else{
s = max(prev+1,min(-tot/2,a[j]-tot));
}
for (int kk = tot;kk >= 1;kk--){
a[j-k*kk] = s++;
}
prev = a[j];
tot=0;
}
}
for (int i = 1;i <= n;i++)
cout <<a[i]<<' ';
return 0;
}
【Henu ACM Round#15 F】Arthur and Questions的更多相关文章
- 【Henu ACM Round#18 F】Arthur and Walls
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑,为什么一个连通块里面的空格没有变成一个矩形? 如果不是形成矩形的话. 肯定是因为某个2x2的单张方形里面. 只有一个角是墙.其 ...
- 【Henu ACM Round#20 F】 Arthur and Brackets
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 所给的li,ri是左括号从左到右的顺序给的. (且注意长度是2*n 现在我们先把第一个左括号放在第1个位置. 然后考虑第二个位置. ...
- 【Henu ACM Round#16 F】Om Nom and Necklace
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...
- 【Henu ACM Round#17 F】Upgrading Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...
- 【Henu ACM Round#15 D】Ilya and Escalator
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 概率DP; 设f[i][j]表示前i个单位时间,j个人进入房间的概率是多少 然后想一下和i-1秒的时候要怎么转移就可以了. i-1秒 ...
- 【Henu ACM Round#15 E】 A and B and Lecture Rooms
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最近公共祖先. (树上倍增 一开始统计出每个子树的节点个数_size[i] 如果x和y相同. 那么直接输出n. 否则求出x和y的最近 ...
- 【Henu ACM Round #13 F】Fibonacci-ish
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举序列的头两个数字是什么 O(N^2) 然后头两个数字确定之后. f[3],f[4]..就确定了 只需查看f[3],f[4]..是 ...
- 【Henu ACM Round#19 F】Dispute
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 这一题和这一题很像 (链接 ) 会发现如果a[i]!=b[i]那么就按下i就好了. 然后改变和他相邻的点. 此后a[i]再也不可能和 ...
- 【Henu ACM Round#15 C】 A and B and Team Training
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举第一种方法. 剩下的全都个第二种方法. 看看能组成多少个队伍就可以了. [代码] #include <bits/stdc+ ...
随机推荐
- 基本数据类型(list、tuple)
1.列表 1.1 定义 li=[1,2,3] 每个元素逗号隔开 list("abc") 迭代 列表是一个容器 => 任意类型 列表是有序的 => 索引 切片 步长 列表 ...
- 向ueditor中插入内容
html在ueditor中插入内容不能直接插入,必须判断编辑器是否创建成功,jsp可以用java代码嵌套的方式. html页面中:<textarea id="zym" nam ...
- [agc004d]salvage robot
题意: 别问我谁翻译的 虫合虫莫国的领土我们可以抽象为H*W的笼子,在这虫合土上,有若干个机器人和一个出口,其余都是空地,每次虫合虫莫会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被虫 ...
- [CTSC2016]单调上升路径
题目:UOJ#201. 题目大意:给定n个点(n是偶数)的完全图,现在要你给每条边确定一个权值(互不相等),使得最长的单调上升路径最短.现在要你输出边的权值. 一条路径被称为单调上升的,如果沿着它走时 ...
- vue中使用viewerjs
项目创建 插件Viewer.js vue init webpack mytest001 安装viewerjs npm install viewerjs 删掉生成的项目里面的helloWord.vue ...
- [luogu] P4514 上帝造题的七分钟 (树状数组,二维差分)
P4514 上帝造题的七分钟 题目背景 裸体就意味着身体. 题目描述 "第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a ...
- java 实现顺序结构线性列表
package com.ncu.list; /** * * 顺序结构线性列表 * * @author liuhao * */ public class SquenceList<T> { p ...
- 2019年北航OO第二单元(多线程电梯任务)总结
一.三次作业总结 1. 说在前面 对于这次的这三次电梯作业,我采用了和几乎所有人都不同的架构:将每个人当作一个线程.这样做有一定的好处:它使得整个问题的建模更加自然,并且在后期人员调度变得复杂时,可以 ...
- LibSVM-windows
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50112477 官方Web: https ...
- A simpleHttp Proxy
http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm