Ural 2064:Caterpillars(思维暴力)
http://acm.timus.ru/problem.aspx?space=1&num=2064
题意:有n只虫子在爬树,每个虫子往上爬ti距离后会往下掉落ti距离,每爬一个单位距离耗费一个单位时间,然后重新往上爬。有q个询问,询问当前的x时刻,爬的最高的虫子所在的最高位置。
思路:画个以时间为x轴,距离为y轴的图,可以清楚知道整个图是类似于一座座山峰的。我们只要处理每个时刻的最高点。
只考虑最高点所在的位置,处理出虫子能达到的最高点的时刻的最高点arrive[]。
考虑每个时刻要得到最优的两种情况:假设当前时刻为x。
1、第一种是某只虫子正在往上爬。这种情况可以考虑成时间逆流地往下掉。时间从后往前扫,对于每个时刻求出最大的arrive[i] - (i - x)。i代表之前某只虫子某个能达到的最高点的时刻。
2、第二种是某只虫子正在往下掉。这种情况将时间从前往后扫,对于每个时刻求出最大的arrive[i] - (x - i)。i的含义同上。
因为时间只有1e6,可以从后往前扫(处理出往上爬的情况)再从前往后(处理往下掉的情况)扫所有时间,处理出ans[]表。对于询问O(1)回答。
而且这题用scanf超时,用读入外挂偶尔超时,看别人代码用了“ios::sync_with_stdio(false);”取消同步,不会超时。
玄学。不懂。
#include <bits/stdc++.h>
using namespace std;
#define N 1000100
#define M 1000004
#define INF 0x3f3f3f3f
int arrive[N], ans[N]; int main() {
ios::sync_with_stdio(false);
int n, t, tid, q;
cin >> n;
bool flag = ;
for(int i = ; i <= n; i++) {
cin >> t; if(t >= M) flag = ;
for(tid = t; tid <= M; tid += * t)
if(arrive[tid] < t) arrive[tid] = t; // arrive[tid]记录tid时刻能达到的最大高度
if(arrive[M] < t - (tid - M)) arrive[M] = t - tid + M; // 终点向下掉
}
for(t = , tid = -INF; t <= M; t++) {
// 时间正着往下掉: (i < t)ans[t] = max(ans[t], arrive[i] + i - t);
if(tid < arrive[t] + t) tid = arrive[t] + t; // 记录目前最大的arrive[i]+i
if(ans[t] < tid - t) ans[t] = tid - t;
}
for(t = M, tid = -INF; t >= ; t--) {
// 时间逆着往下掉(向上爬): (t < i)ans[t] = max(ans[t], arrive[i] - i + t);
if(tid < arrive[t] - t) tid = arrive[t] - t; // 记录之前最大的arrive[i]-i
if(ans[t] < tid + t) ans[t] = tid + t;
}
cin >> q;
while(q--) {
cin >> t;
if(flag) cout << t << '\n';
else cout << ans[t] << '\n';
}
return ;
}
Ural 2064:Caterpillars(思维暴力)的更多相关文章
- ural 2064. Caterpillars
2064. Caterpillars Time limit: 3.0 secondMemory limit: 64 MB Young gardener didn’t visit his garden ...
- Nikita and string [思维-暴力] ACM
codeforces Nikita and string time limit per test 2 seconds memory limit per test 256 megabytes O ...
- codeforce 429D. Tricky Function (思维暴力过)
题目描述 Iahub and Sorin are the best competitive programmers in their town. However, they can't both qu ...
- ZOJ - 3983 - Crusaders Quest(思维 + 暴力)
题意: 给出一个字符串,长度为9,包含三种各三个字母"a","g","o",如果一次消除连续三个一样的分数+1,消完自动向左补齐 其中可以消 ...
- codeforces 768 C. Jon Snow and his Favourite Number(思维+暴力)
题目链接:http://codeforces.com/contest/768/problem/C 题意:给出n个数,k个操作,和一个x,每次操作先排序然后对奇数位数进行xor x操作,最后问k次操作后 ...
- CodeForces - 1244D (思维+暴力)
题意 https://vjudge.net/problem/CodeForces-1244D 有一棵树,有3种颜色,第i个节点染成第j种颜色的代价是c(i,j),现在要你求出一种染色方案,使得总代价最 ...
- CodeForces - 1248D1 (思维+暴力)
题意 有一个括号序列,你可以选择两个位置i,j(i可以等于j),进行交换.使得最后的循环位置(i的数目)最大. 循环位置:i(0<=i<len),将前i个字符移到最后,得到的新序列是合法的 ...
- URAL 1957 Wrong Answer 暴力
Wrong Answer 思路: 1.先枚举4的全排列,即球赛的所有可能结果,一共4!=24种情况 2.对于每种情况,DFS 未确定的比赛 的结果,判断这种情况是否可达. 剪枝: 1.对于每种全排列, ...
- hdu 4970 Killing Monsters (思维 暴力)
题目链接 题意: 有n座塔,每座塔的攻击范围为[l,r],攻击力为d,有k个怪兽从这些塔前面经过,第i只怪兽初始的生命力为hp,出现的位置为x,终点为第n个格子.问最后有多少只怪兽还活着. 分析: 这 ...
随机推荐
- Angular route传参
从 router-link-page1 跳转 router-link-page2 和 router-link-page3 通过自定义路由 设置router-link-page2的路由后有3个参数,pa ...
- H3C交换机配置ACL禁止vlan间互访
1.先把基础工作做好,就是配置VLAN,配置Trunk,确定10个VLAN和相应的端口都正确.假设10个VLAN的地址分别是192.168.10.X,192.168.20.X......192.168 ...
- nginx配置 负载均衡
配置nginx #配置虚拟主机 server { listen 80; server_name www.testaaa.com; location / { #root /usr/local/nginx ...
- Linux C lock pages
虚拟内存按页划分,我们可以明确告诉系统:某一个虚拟内存页需要和实际内存帧相关联.这样一来,该内存页就被换进来了,而且不会被系统换出去.这一行为叫做锁页(locking a page). 一般来讲页 ...
- jquery QQ微博
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HtmlAgilityPack开发
官方网站: http://html-agility-pack.net/ Nuget安装: Install-Package HtmlAgilityPack C# HTML Parser Examples ...
- 改善C#程序的建议6:在线程同步中使用信号量
原文:改善C#程序的建议6:在线程同步中使用信号量 所谓线程同步,就是多个线程之间在某个对象上执行等待(也可理解为锁定该对象),直到该对象被解除锁定.C#中对象的类型分为引用类型和值类型.CLR在这两 ...
- linux c 读写 ini 配置文件
.ini 文件格式如下: [section1] key1=value ... keyn=value [section2] key1=value ... keyn=value 代码如下: #define ...
- Delphi事件的广播
原文地址:Delphi事件的广播 转作者:MondaySoftware 明天就是五一节了,辛苦了好几个月,借此机会应该尽情放松一番.可是想到Blog好久没有写文章,似乎缺些什么似的.这几个月来在项目中 ...
- idea 导入maven项目
1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok ...