Codeforces Good Bye 2016 D 模拟搜索?
给出烟花的爆炸方式和爆炸次数 问最后有多少个格子会被炸到
如果dfs的话会超时...
利用模拟每一层来搜索..?
思想就是一开始有一个爆炸点向上 然后模拟完第一段 会产生一个爆炸点 朝两个方向 就用vector来存 每一层都处理一段的爆炸点 产生新一段的爆炸点
因为5*30=150 所以图建300就可以了 300 * 300 * 30的时间复杂度
但是常数很大..不过无所谓啦..
需要注意的是 一个爆炸点可能会同时出现两次朝同一个方向开始爆炸的烟花 这个是没有意义的 所以拿一个数组来记录 不然最后会产生很多情况
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<string>
#include<vector>
#include<queue>
#include<iostream>
using namespace std;
#define L long long
int a[35];
int n;
bool vis[405][405];
int res ;
/// 1 2 3 4 5 6 7 8
int dx[8] = {-1,-1,0,1,1,1,0,-1};
int dy[8] = {0,1,1,1,0,-1,-1,-1};
vector<int >q[405][405];
vector<int >z[405][405];
bool cz[405][405][8];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
memset(vis,true,sizeof(vis));
for(int i = 0;i<=402;i++){
for(int j = 0;j<= 402;j++){
q[i][j].clear();
}
}
for(int i = 0;i<=402;i++){
for(int j = 0;j<= 402;j++){
z[i][j].clear();
}
}
res = 0;
q[200][200].push_back(0);
memset(cz,false,sizeof(cz));
for(int w = 1;w <= n ;w ++){
for(int i = 1;i<=400;i++){
for(int j = 1;j<=400;j++){
for(int l = 0; l< q[i][j].size();l ++){
for(int k = 1;k<=a[w];k++){
if(vis[k*dx[q[i][j][l]] + i][k*dy[q[i][j][l]] + j] == true)
vis[k*dx[q[i][j][l]] + i][k*dy[q[i][j][l]] + j] = false,res ++ ;
}
int fx1 = q[i][j][l] + 1; fx1 += 8; fx1 %= 8;
int fx2 = q[i][j][l] - 1; fx2 += 8; fx2 %= 8;
if(cz[a[w]*dx[q[i][j][l]] + i][a[w]*dy[q[i][j][l]] + j][fx1] == false)
z[a[w]*dx[q[i][j][l]] + i][a[w]*dy[q[i][j][l]] + j].push_back(fx1),cz[a[w]*dx[q[i][j][l]] + i][a[w]*dy[q[i][j][l]] + j][fx1] = true;
if(cz[a[w]*dx[q[i][j][l]] + i][a[w]*dy[q[i][j][l]] + j][fx2] == false)
z[a[w]*dx[q[i][j][l]] + i][a[w]*dy[q[i][j][l]] + j].push_back(fx2),cz[a[w]*dx[q[i][j][l]] + i][a[w]*dy[q[i][j][l]] + j][fx2] = true;
}
q[i][j].clear();
}
}
for(int i = 1;i<=400;i++){
for(int j = 1 ;j<=400;j++){
for(int l = 0;l < z[i][j].size();l ++){
q[i][j].push_back(z[i][j][l]);
}
z[i][j].clear();
}
}
memset(cz, false, sizeof(cz));
}
printf("%d\n",res);
}
Codeforces Good Bye 2016 D 模拟搜索?的更多相关文章
- codeforces Good bye 2016 E 线段树维护dp区间合并
codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...
- Codeforces Good Bye 2016 题解
好久没有fst题了...比赛先A了前4题然后发现room里有人已经X完题了没办法只能去打E题,结果差一点点打完...然后C题fst掉了结果就掉rating 了...下面放题解 ### [A. New ...
- Codeforces Good Bye 2016 E. New Year and Old Subsequence
传送门 题意: 给出一个长度为\(n\)的串,现在有\(q\)个询问,每个询问是一个区间\([l,r]\),要回答在区间\([l,r]\)中,最少需要删多少个数,满足区间中包含\(2017\)的子序列 ...
- CodeForces Good Bye 2016
A题,水题略过. B题,也水,但是想复杂了.只要运动超出[0,20000]的范围就算不可能了. C题,我自己的方法是解不等式,然后取最大的答案即可.代码如下: #include <stdio.h ...
- 【LOJ6254】最优卡组 堆(模拟搜索)
[LOJ6254]最优卡组 题面 题解:常用的用堆模拟搜索套路(当然也可以二分).先将每个卡包里的卡从大到小排序,然后将所有卡包按(最大值-次大值)从小到大排序,并提前处理掉只有一张卡的卡包. 我们将 ...
- 【BZOJ4524】[Cqoi2016]伪光滑数 堆(模拟搜索)
[BZOJ4524][Cqoi2016]伪光滑数 Description 若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M ...
- CodeForces.158A Next Round (水模拟)
CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...
- 【BZOJ4345】[POI2016]Korale 堆(模拟搜索)
[BZOJ4345][POI2016]Korale Description 有n个带标号的珠子,第i个珠子的价值为a[i].现在你可以选择若干个珠子组成项链(也可以一个都不选),项链的价值为所有珠子的 ...
- JavaScript在表格中模拟搜索多关键词搜索和筛选
模拟搜索需要实现以下功能: 1.用户的模糊搜索不区分大小写,需要小写字母匹配同样可以匹配到该字母的大写单词. 2.多关键词模糊搜索,假设用户关键词以空格分隔,在关键词不完整的情况下仍然可以匹配到包含该 ...
随机推荐
- 第七届山东省ACM省赛
激动人心的省赛终于结束了…平静下来再回头看真的感觉一波三折…先是赛前毫无预兆的查出突发性耳聋…伴随而来的就是左耳听力下降.轻微耳鸣.极个别情况下的头晕…不过这都还好,毕竟药物可以恢复…热身赛只过了一道 ...
- java抽象-老师的生日-逻辑思维-有趣的面试题-遁地龙卷风
(-1)写在前面 都快去北京了,硬生生的安排一场java考试,对于那些特别细节的东西我忘了吧也不觉得有什么不好,以前都记得,也都见过,只不过平时不常用连接断了,但是你死记硬背是没用的,一段时间后还是会 ...
- C/C++ 结构体内存对齐
内存对齐是指的是编译器在编译的时候总是会将结构体的元素的地址放在一些合适的位置使得CPU访问这些数据的效率变得更高.首先来看下面这个例子: struct A{ char a; char b; int ...
- nginx自动检测后台服务器健康状态
转自http://www.iyunv.com/thread-38535-1-1.html 公司业务线上对后端节点的健康检查是通过nginx_upstream_check_module模块做的,这里我将 ...
- tornado 重定向404(方法不对)
application = tornado.web.Application(url_wrapper([ (r"", include('app.views.web_services. ...
- senlin __init__() got an unexpected keyword argument 'additional_headers'
从senlin源码重新编译更新了服务,然后执行 senlin的 cli就遇到了错误: __init__() got an unexpected keyword argument 'additional ...
- mysql创建定时任务
一.前言 自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作 ...
- @Controller和@RestController的区别
1. Controller, RestController的共同点 都是用来表示spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @C ...
- Android Studio增加NDK代码编译支持--Mac环境
Android的APP开发基本都是使用Java或者跨平台框架进行开发的,对于很多APP来说已经足够了,但是,对于提供功能给外部使用或者性能要求很高的需求下,如图像处理等,可能会需要C/C++库的支持, ...
- 牛B的调试工具:OzCode
官网:http://www.oz-code.com/ 视频:https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/OzCode https:/ ...