UVA-201,紫书此处有错

这个题数据小,所以我们暴力可解,思路是这样的:    heng[ i ] [ j ]   一旦是 1 , 就意味着,在( i,j )这个点出发有个 向右的线。 zhi[][] 同理,向下的线。然后枚举所有边的情况,一旦judge 函数在某个点,找到了某个 以  len  为边的   完整的方形(len,x,y),就返回1

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int zhi[11][11],heng[11][11];
 5 int len[11];
 6 int judge(int len,int x,int y){
 7     for(int i=0;i<len;i++){      //边是由线段构成的,一旦有哪个段不成立,立即退出。
 8         if(zhi[x][y+i]==0)       //从左上角 一直到 左下角
 9             return -1;
10         if(heng[x+i][y]==0)       //从左上角 一直到 右上角
11             return -1;
12         if(zhi[x+len][y+i]==0)    //从 右上角 一直到右下角
13             return -1;
14         if(heng[x+i][y+len]==0)    //从左下角 一直到 右下角
15             return -1;
16     }
17     return 1;                 //都走完了,成立
18 }
19
20 int main(){
21     int n,m,k;
22     int t1,t2;
23     char c,cc,ccc,cccc;
24     int con=0;
25     while(++con && cin>>n>>m){
26         memset(zhi,0,sizeof(zhi));
27         memset(heng,0,sizeof(heng));
28         memset(len,0,sizeof(len));
29
30         for(int i=0;i<m;i++){
31             scanf("%c%c%c%d%c%d",&cccc,&c,&cc,&t1,&ccc,&t2);
32
33             if(c==‘H‘) {/*cout<<"sss"<<endl;  */ zhi[t1][t2]=1; }
34             if(c==‘V‘)    heng[t2][t1]=1;                           //注意,我说的紫书错的地方就在这里,你如果按刘老师写的,那是 heng[t1][t2]=1,我一直卡这里,后来改成符合原题的,ac
35         }
36
37        if(con!=1) printf("\n**********************************\n\n");
38         for(int i=1;i<=n;i++){
39             for(int x=1;x<=n-i+1;x++){    //压缩
40                 for(int y=1;y<=n-i+1;y++){   //压缩
41
42                         if(judge(i,x,y) == 1)
43                         {
44                            //cout<<"ok"<<endl;
45                             len[i]++;
46                         }
47
48                 }
49             }
50         }
51
52     int flag=0;
53
54     printf("Problem #%d\n\n",con);
55     for(int i=1;i<=n;i++)
56         if(len[i]!=0){
57             flag++;
58             printf("%d square (s) of size %d\n",len[i],i);
59         }
60     if(flag==0)
61         printf("No completed squares can be found.\n");
62 }
63 }

原文地址:https://www.cnblogs.com/3532gll/p/9416446.html

时间: 2024-11-08 09:59:15

UVA-201,紫书此处有错的相关文章

紫书例题6-3 (UVa 442)

题目地址:https://vjudge.net/problem/UVA-442 题目大意:汗颜,其实我是直接看紫书的中文题意的,大意就是计算两个矩阵乘法次数,设计线性代数知识,可自己百度矩阵乘法. 思路:栈+模拟,左括号开始入栈,右括号开始计算栈顶两个矩阵的乘法次数然后再将新矩阵的n,m入栈即可. AC代码: #include <iostream> #include <string> #include <stack> #include <cstring> u

紫书例题6-4 (UVa 11988)

题目链接:https://vjudge.net/problem/UVA-11988 题目大意:输入一串字符,并按照要求输出,遇到'['字符就将光标移动到开头,遇到']'字符就将光标移动到末尾. 思路: 题目不难懂,很明显的一个模拟就行,重点是如何取存储,这里选择使用链表,链表的具体定义可以去百度看一下,这里不做过多解释,可以简单理解为一个未知长度的数组,它可以借助指针在任意位置插入(删除). 这题具体的操作可以用草稿纸模拟一遍,我是看一位博主的blog明白的,原blog地址:https://bl

紫书第4章 函数和递归

1  序 系统的整理下第四章的学习笔记.同上次一样,尽量在不依赖书本的情况下自己先把例题做出来.这次有许多道题代码量都比较大,在例题中我都用纯C语言编写,但由于习题的挑战性和复杂度,我最终还是决定在第五章开始前,就用C++来完成习题.不过所有的代码都是能在C++提交下AC的. 在习题中,我都习惯性的构造一个类来求解问题,从我个人角度讲,这会让我的思路清晰不少,希望自己的一些代码风格不会影响读者对解题思路的理解. 其实在第四章前,我就顾虑着是不是真的打算把题目全做了,这些题目代码量这么大,要耗费很

第10章例题(紫书)

21/21 题目都很基础,有很多题书上讲得比较详细,然后隔得时间有点久,所以具体什么trick都忘了,思路也懒得去回忆,所以将就着放上来了.... 例题10–1 Uva 11582 题意:输入a, b, n让你计算F[a^b]%n;其中这个F[i]是斐波那契数: 题解: 这题是快速幂+找循环节,用什么方法找循环节呢?因为第一个数是0和1,然后当再出现0和1的时候就是出现循环节的时候,然后假如找到了循环节T,然后就有F[n] = F[n % T],预处理找循环节,O(一百万左右),快速幂logn

第11章例题(紫书)

10/15 这几天先专心刷一下图论的基础题目,也蛮多的,慢慢来... 例题11-1 uva 12219 题意:给你一个表达式,然后又一些子树在之前重复出现过,先要你给这些子树出现的顺序编个号1...N,然后如果重复出现就用编号替代,输出替代之后的表达式. 题解:这是一个表达式树的问题,显示建树,如果让我来写的话,很麻烦,搞不好复杂度是O(n^2),因为字符串是一直扫描下去的,所以就利用一个指针作为全局,然后一直扫下去,就忽略一个左括号,建左树,然后忽略逗号,建右树,忽略右括号,然后一直扫下去,就

紫书第三章 数组和字符串

1  序 系统的整理下第三章的学习笔记.例题代码是在未看书本方法前自己尝试并AC的代码,不一定比书上的标程好:习题除了3-8百度了求解方法,其它均独立完成后,会适当查阅网上资料进行整理总结.希望本博文方便自己日后复习的同时,也能给他人带来点有益的帮助(建议配合紫书--<算法竞赛入门经典(第2版)>阅读本博客).有不足或错误之处,欢迎读者指出. 2  例题 2.1  UVa272--Tex Quotes #include <stdio.h> int main() { bool log

UAa 1339,紫书P73,词频

题目链接:https://uva.onlinejudge.org/external/13/1339.pdf 紫书P73 解题报告: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; int main() { //freopen("input.txt","r",stdin

紫书p155 用中序后序构造二叉树

二叉树各节点权值是不相同的正整数,输入二叉树的中序后序,求到根节点权和最小的叶节点 紫书贼强,递归写的服气,慢慢理解吧 原文是建树之后用dfs搜的,我试着一边建树一边归纳最短路径 #include<bits/stdc++.h> using namespace std; const int maxv = 10010; int in[maxv], post[maxv], lch[maxv], rch[maxv];//中序,后序,左子树,右子树 int n, minnum, minsum; bool

uva 201 - Squares(自己的方法,同学有更好一点点的方法)

#include<stdio.h> #include<string.h> #include<string> #include<iostream> #include<algorithm> using namespace std; int h[20][20]; int v[20][20]; int size_[20]; int n,m; int flag; void judge(int x,int y)//这是关键部分的代码,用来判读那是否能构成sq