uva 229 - Scanner(枚举技巧)

2024-06-05 03:48
文章标签 技巧 枚举 229 uva scanner

本文主要是介绍uva 229 - Scanner(枚举技巧),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:uva 229 - Scanner


题目大意:工厂有一个扫描器,从四条线进行扫描,它可以扫描出直线上有多少个位置是存在物体的。请还原出物体的形状,如果不能确定或者矛盾,输出空点。


解题思路:由确定的某条线去修改没有确定的线,然后会产生出新的确定线,以此计算,如果最后确定线的个数不等于总的个数,则是矛盾。


#include <stdio.h>
#include <string.h>const int cN[4] = {10, 24, 15, 24};
const int N = 30;int S[4][N], tB[4][N], tW[4][N];
int cB[4][N], cW[4][N], g[N][N], v[4][N];void init () {for (int i = 0; i < cN[0]; i++)S[0][i] = 15;for (int i = 0; i < cN[1]; i++) {if (i < 10)S[1][i] = i + 1;else if (i > 13)S[1][i] = 24 - i;elseS[1][i] = 10;}for (int i = 0; i < cN[2]; i++)S[2][i] = 10;for (int i = 0; i < cN[3]; i++) {if (i < 10)S[3][i] = i + 1;else if (i > 13)S[3][i] = 24 - i;elseS[3][i] = 10;}
}void read () {memset(g, -1, sizeof(g));memset(v, 0, sizeof(v));memset(cB, 0, sizeof(cB));memset(cW, 0, sizeof(cW));for (int i = 0; i < 4; i++) {for (int j = 0; j < cN[i]; j++) {scanf("%d", &tB[i][j]);tW[i][j] = S[i][j] - tB[i][j];}}
}void cat (int x, int y) {if (g[x][y] == 1) {cB[0][x]++; cB[1][x+y]++; cB[2][y]++; cB[3][y-x+9]++;} else {cW[0][x]++; cW[1][x+y]++; cW[2][y]++; cW[3][y-x+9]++;}
}void draw (int x, int y, int val) {v[x][y] = 1;if (x == 0) {for (int i = 0; i < 15; i++) {if (g[y][i] == -1) {g[y][i] = val;cat (y, i);}}} else if (x == 1) {for (int i = 0; i < 10; i++) {for (int j = 0; j < 15; j++) {if (i + j != y) continue;if (g[i][j] == -1) {g[i][j] = val;cat (i, j);}}}} else if (x == 2) {for (int i = 0; i < 10; i++) {if (g[i][y] == -1) {g[i][y] = val;cat (i, y);}}} else {for (int i = 0; i < 10; i++) {for (int j = 0; j < 15; j++) {if (j - i  + 9 != y) continue;if (g[i][j] == -1) {g[i][j] = val;cat (i, j);}}}}
}bool judge () {for (int i = 0; i < 4; i++) {for (int j = 0; j < cN[i]; j++) {if (v[i][j]) continue;if (cW[i][j] == tW[i][j]) {draw (i, j, 1);return true;} else if (cB[i][j] == tB[i][j]) {draw (i, j, 0);return true;}}}return false;
}void solve () {int cnt = 0;while (judge()) cnt++;if (cnt != 73) memset(g, 0, sizeof(g));for (int i = 0; i < 10; i++) {for (int j = 0; j < 15; j++)printf("%c", g[i][j] ? '#' : '.');printf("\n");}
}int main () {init ();int cas;scanf("%d", &cas);while (cas--) {read ();solve ();if (cas) printf("\n");}return 0;
}


这篇关于uva 229 - Scanner(枚举技巧)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031990

相关文章

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库