[POI2015]LAS
动态规划:
这里用一种我想不到的思想,我们以美食来转移,设计状态$f[i][S](S\in\{0\sim3\})$其中$S$为$0$时表示第$i$个食物没有被人选,$1$表示被左边的人选了,$2$表示被右边的人选了,$3$表示被两个人同时选中
状态转移有点多,但是挺简单,不多赘述
接下来是美滋滋的代码时间~~~
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<algorithm>
#define reg register
using namespace std;
const int N=1e6+5;
int n,a[N],ans[N],f[N][4];//0:á?±???2??? 1:×ó±? 2:óò±? 3:á?±?????
inline int read()
{
int x=0,w=1;
char c=getchar();
while (!isdigit(c)&&c!='-') c=getchar();
if (c=='-') c=getchar(),w=-1;
while (isdigit(c))
{
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*w;
}
inline bool work(int k)
{
memset(f,-1,sizeof(f)); f[1][k]=-2;
for (reg int i=2;i<=n;i++)
{
if (~f[i-1][2]&&a[i-1]>=a[i]) f[i][0]=2;
if (~f[i-1][3]&&a[i-1]>=a[i]*2) f[i][0]=3;
if (~f[i-1][0]&&a[i]>=a[i-1]) f[i][1]=0;
if (~f[i-1][1]&&a[i]*2>=a[i-1]) f[i][1]=1;
if (~f[i-1][2]&&a[i-1]*2>=a[i]) f[i][2]=2;
if (~f[i-1][3]&&a[i-1]*2>=a[i]) f[i][2]=3;
if (~f[i-1][0]&&a[i]>=a[i-1]*2) f[i][3]=0;
if (~f[i-1][1]&&a[i]>=a[i-1]) f[i][3]=1;
}
return ~f[n][k];
}
inline void print(int k)
{
--n;
for (reg int i=n;~i;i--)
{
if (k==1) ans[i]=i%n+1;
if (k==2) ans[i+1]=i%n+1;
if (k==3) ans[i]=ans[i+1]=i%n+1;
k=f[i+1][k];
}
for (reg int i=1;i<=n;i++) printf("%d ",ans[i]);
exit(0);
}
int main()
{
n=read();
for (reg int i=1;i<=n;a[i++]=read()); a[++n]=a[1];
for (reg int i=0;i<4;i++) if (work(i)) print(i);
puts("NIE");
return 0;
}
[POI2015]LAS的更多相关文章
- p3584 [POI2015]LAS
传送门 分析 f[i][S](S∈[0,4])表示第iii个食物没有被选/左边选/右边选/同时选的状态是由哪一个状态转移来的 我们需要满足两个条件: 每个人只能选择一个 改变选择之后不会比当前获得热 ...
- POI2015 解题报告
由于博主没有BZOJ权限号, 是在洛咕做的题~ 完成了13题(虽然有一半难题都是看题解的QAQ)剩下的题咕咕咕~~ Luogu3585 [POI2015]PIE Solution 模拟, 按顺序搜索, ...
- [POI2015]CZA
[POI2015]CZA p很小,讨论 p=0... p=1... p=2:n-1放左或者放右两种情况,剩下怎么放是固定的,模拟然后判断即可 p=3: 正着做要状压,类似放书和排座位那些题,考虑以某个 ...
- BZOJ 4385: [POI2015]Wilcze doły
4385: [POI2015]Wilcze doły Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 648 Solved: 263[Submit][ ...
- BZOJ 4384: [POI2015]Trzy wieże
4384: [POI2015]Trzy wieże Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 217 Solved: 61[Submit][St ...
- las数据集加载las数据
引用的类库:ESRI.ArcGIS.GeoDatabaseExtensions 逻辑步骤: 1.创建las数据集(ILasDataset). 2.实例化las数据集的编辑器(ILasDatasetEd ...
- ArcGIS Engine实现LAS数据集转RASTER
ArcGIS 10.1版本开始提供了将LAS数据集转换为栅格的新功能,最近在做LAS数据处理时通过ArcGIS Engine10.1+C#实现了LAS数据集转RASTER,既然ArcGIS DeskT ...
- Bzoj 3747: [POI2015]Kinoman 线段树
3747: [POI2015]Kinoman Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 553 Solved: 222[Submit][Stat ...
- BZOJ 3747 POI2015 Kinoman 段树
标题效果:有m点,每个点都有一个权值.现在我们有这个m为点的长度n该序列,寻求区间,它仅出现一次在正确的点区间内值和最大 想了很久,甚至神标题,奔说是水的问题--我醉了 枚举左点 对于每个请求留点右键 ...
随机推荐
- 插入排序——C语言
插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. (每步将一个待 ...
- React-intl相关使用介绍
React-intl用于国际化react组件,提供react组件和api来格式化日期.数字,字符等等.其中一个很重要的功能是实现文本翻译,将你所做的中文版应用所有文字转为英文. 关于配置什么的,请参照 ...
- SpringBoot exception异常处理机制源码解析
一.Spring Boot默认的异常处理机制 1:浏览器默认返回效果 2:原理解析 为了便于源码跟踪解析,在·Controller中手动设置异常. @RequestMapping(value=&quo ...
- Python 的 Mixin 类(转)
转1:https://www.cnblogs.com/aademeng/articles/7262520.html 转2:https://blog.csdn.net/u010377372/articl ...
- springboot + quartz
在这里我单独整理对定时任务的使用.之前觉得用@Scheduled这个注解就可以解决,后来发现,定时任务比较多时,且时间集中在某个时间段,或者执行的时间间隔比较短时,多个任务执行就会依次执行,这就导致任 ...
- [C#] LINQ之SelectMany和GroupJoin
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- HTTP协议 学习
HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程.客户端连上web服 ...
- 【原创】大叔经验分享(84)spark sql中设置hive.exec.max.dynamic.partitions无效
spark 2.4 spark sql中执行 set hive.exec.max.dynamic.partitions=10000; 后再执行sql依然会报错: org.apache.hadoop.h ...
- S2-033、S2-037
前言 S2-033漏洞和S2-032类似,也是由于开启了动态方法调用,action mapper中的执行的方法名可控,导致了ognl表达式注入. 正文 Rest插件中获取action mapper是用 ...
- ajax获取后台数据出错parsererror
原因是dataType如果为json,返回的数据是text就会报错.