简单搜索 kuangbin C D
C - Catch That Cow POJ - 3278
我心态崩了,现在来回顾很早之前写的简单搜索,好难啊,我怎么写不出来。
我开始把这个写成了dfs,还写搓了。。。
慢慢来吧。
这个题目很明显是一个很简单的搜索题,但是如果用dfs的话很容易出现问题,而且复杂度不低。
所以选择用bfs。
这个知道用bfs就应该比较简单了。
就是有三种走的方式,因为k最大为100000 所以我们要限制一下,不然会超时。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 5e5 + ;
int n, k;
bool vis[maxn];
int d[maxn];
int t[] = { ,- }; void bfs(int x)
{
queue<int>que;
que.push(x);
vis[x] = ;
d[x] = ; while (!que.empty()) {
int u = que.front(); que.pop();
if (u > ) continue;
if (u < ) continue;
if(u==k)
{
printf("%d\n", d[k]);
return;
}
for(int i=;i<=;i++)
{
int tx;
if (i == ) tx = u * ;
else tx = u + t[i]; if (vis[tx]) continue;
if (u < || u > ) continue; vis[tx] = ;
d[tx] = d[u] + ;
que.push(tx);
}
}
} int main()
{
scanf("%d%d", &n, &k);
bfs(n);
return ;
}
C
D - Fliptile
看到这个题目,我真的心态崩了,这个题目好难啊,结果居然是简单搜索,我现在怀疑我这一年来干了什么。。。
感觉自己好菜。。。
算了,没办法,还是好好刷题吧。
这个题目真的很难。
因为我们每一个翻转,都会改变左右的色块,所以我们每次从下面的那块来使得上面的那块翻转,如果需要的话。
如果知道这一点了就稍微好做那么一点点了。
所以我们只要枚举第一块是怎么翻转的,这样子可以直接推出下面的是怎么翻转的。
知道这一点了,就很好写了,不过还是不一定可以写出代码,因为不知道怎么处理。
然后就看题解学习一下怎么写吧。
这个题目我有一个地方出现bug了,然后一直没有找到,就是一行有m个数,所以最多有m个1 所以枚举第一行的时候应该是1<<m
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 1e5 + ;
int f[][], mp[][];
const int dx[] = { -,,,, };
const int dy[] = { ,-,,, };
int ans[][];
int n, m; int getnum(int x, int y)//这个是由初始和翻转次数来判断这个面是0还是1
{
int res = mp[x][y];
for (int i = ; i < ; i++) {
int tx = x + dx[i];
int ty = y + dy[i]; if (tx >= && ty >= && tx < n&&ty < m) res += f[tx][ty];
}
return res % ;
} int cal() {
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
if (getnum(i - , j)) {
f[i][j] = ;
}
}
}
for (int i = ; i < m; i++) {
if (getnum(n - , i)) return -;
}
int res = ;
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
res += f[i][j];
}
}
return res;
} void solve() {
int res = -;
for (int i = ; i < ( << m); i++) {
memset(f, , sizeof(f));
for (int j = ; j < m; j++) {
f[][m - j - ] = i >> j & ;
}
int num = cal();
if (num >= && (res < || num < res)) {
res = num;
memcpy(ans, f, sizeof(f));
}
}
if (res == -) printf("IMPOSSIBLE\n");
else {
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
printf("%d%c", ans[i][j], j + == m ? '\n' : ' ');
}
}
}
} int main() {
scanf("%d%d", &n, &m);
for (int i = ; i < n; i++) {
for (int j = ; j < m; j++) {
scanf("%d", &mp[i][j]);
}
}
solve();
return ;
}
D
简单搜索 kuangbin C D的更多相关文章
- ElasticSearch 5学习(4)——简单搜索笔记
空搜索: GET /_search hits: total 总数 hits 前10条数据 hits 数组中的每个结果都包含_index._type和文档的_id字段,被加入到_source字段中这意味 ...
- nyoj 284 坦克大战 简单搜索
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...
- 分布式搜索ElasticSearch构建集群与简单搜索实例应用
分布式搜索ElasticSearch构建集群与简单搜索实例应用 关于ElasticSearch不介绍了,直接说应用. 分布式ElasticSearch集群构建的方法. 1.通过在程序中创建一个嵌入es ...
- solr简单搜索案例
solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...
- 和我一起打造个简单搜索之SpringDataElasticSearch入门
网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...
- 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮
前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...
- 和我一起打造个简单搜索之Logstash实时同步建立索引
用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...
- 和我一起打造个简单搜索之IK分词以及拼音分词
elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...
- 和我一起打造个简单搜索之ElasticSearch集群搭建
我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌.尺寸.适用季节.价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品. 站内搜索对 ...
随机推荐
- 数据结构和算法(Golang实现)(8.1)基础知识-前言
基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...
- syncronized如何上锁
上锁,根据操作系统所说的原则,对共享变量上锁,对临界区上锁.谁访问临界资源?就给谁上锁 同步监视器,它上锁的对象. 1.用关键字给方法上锁 2.用synchronized代码块上锁 默认上锁对象:th ...
- 05-移动web之流式布局
一.视口 1.常见屏幕知识 设备 解释 描述 宽 屏幕的宽度 - (单位:英寸) 屏幕的宽度 高 屏幕的高度 -(单位:英寸) 屏幕的高度 对角线 屏幕的对角线的长度 英寸 一般说手机尺寸 是指以屏幕 ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十一)之Holding Your Objects
To solve the general programming problem, you need to create any number of objects, anytime, anywher ...
- 打印图片的属性和实现另存图片功能以及使用numpy
上一篇我们已经学了如何读取图片的功能了以及和opencv的环境搭建了,今天接着来学习,哈哈哈,今天刚好五一,也没闲着,继续学习. 1. 首先我们来实现打印出图片的一些属性功能, 先来看一段代码: im ...
- 模仿NetFlix首页效果
之前写过UWP 带左右滚动按钮的横向ListView———仿NetFlix首页河的设计,讲述了如何设计一个带有左右滚动按钮横向的ListView. 不过我在半年之前挖了一个坑,由于工作关系,没时间来填 ...
- C语言二维数组超细讲解
用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入.处理和输出. 在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什 ...
- ppt和pptx转图片完整代码,解决2003版和2007版中文乱码问题
引入所需依赖,注意poi版本,新版本不支持,最好使用和我一样的版本. <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --& ...
- [V&N2020 公开赛] Web misc部分题解
0x00 前言 写了一天题目,学到了好多东西, 简单记录一下 0x01 Web HappyCTFd 直接使用网上公开的cve打: 解题思路:先注册一个admin空格账号,注意这里的靶机无法访问外网,邮 ...
- java Int类型转为double 类型;string转double
int a=12; double b=(double)a; or double c=Double.valueOf((double)a); string a_s="12"; doub ...