【刘汝佳书】习题4-2 UVA201

本文分享了如何快速访问UVA在线评测系统的题目,通过直接浏览PDF文件提高效率。同时强调了在解决某个具体问题时,需要注意输入格式,特别是水平边和竖直边的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【2019.3.31】
最近vjudge看不到UVA的题目了,每次都要打开官网看题目,真是令人捉急
但是!!我们可以直接浏览题目的pdf文件:
https://uva.onlinejudge.org/external/ 这个可以看到所有题目索引,但打开还是慢
https://uva.onlinejudge.org/external/2/201.pdf 这个直接访问要看的题的文件,超快
类似于这个格式,只需要把后面的2/201改成自己想看的题目就可以了!
飞速看题,爽的一批。

下面这个题主要注意的是输入格式:
水平边:H 行数 列数
竖直边:V 列数 行数 ?这个千万别弄错了

#include <iostream>
#include <cstring>

using namespace std;

int n;  //dots
int m;  //lines
int square[11][11][2];  //水平边,垂直边
int numSize[11];        //各个尺寸的数量
int numTotal;

//以点(r,c)为左上角搜索尺寸为s的方块
//需要判断越界
//找到返回1
//没找到,缺左/上边、或者越界返回-1
//没找到,缺右/下边返回0
int findSize(int r, int c, int s)
{
    if(r+s>n || c+s>n) return -1;
    //cout<<r<<' '<<c<<' '<<s<<endl;

    for(int j=c; j<c+s; j++)    //上边
        if(square[r][j][0]!=1)
            return -1;
    //cout<<"0 OK"<<endl;

    for(int i=r; i<r+s; i++)    //左边
        if(square[i][c][1]!=1)
            return -1;
    //cout<<"1 OK"<<endl;

    for(int j=c; j<c+s; j++)    //下边
        if(square[r+s][j][0]!=1)
            return 0;
    //cout<<"2 OK"<<endl;

    for(int i=r; i<r+s; i++)    //右边
        if(square[i][c+s][1]!=1)
            return 0;
    //cout<<"3 OK"<<endl;

    return 1;
}

int main()
{
    //freopen("C:\\Users\\Summer\\Desktop\\input.txt", "r", stdin);
    //freopen("C:\\Users\\Summer\\Desktop\\output.txt", "w", stdout);

    int numSqu = 0;
    while(scanf("%d", &n)!=EOF) {
        memset(square, 0, sizeof(square));
        memset(numSize, 0, sizeof(numSize));
        numTotal=0;

        scanf("%d", &m);
        char t;
        int r,c;
        for(int i=0; i<m; i++) {
            cin>>t>>r>>c;
            if(t=='H') square[r][c][0]=1;
            else       square[c][r][1]=1;
        }

        int flag;
        for(int i=1; i<n; i++) {
            for(int j=1; j<n; j++) {
                for(int s=1; s<n; s++) {
                    flag=findSize(i, j, s);
                    if(flag==1) {
                        numSize[s]++;
                        numTotal++;
                    }
                    else if(flag==-1)
                        break;
                }
            }
        }

        if(numSqu) cout<<endl<<"**********************************"<<endl<<endl;
        numSqu++;
        cout<<"Problem #"<<numSqu<<endl<<endl;
        if(numTotal) {
            for(int s=1; s<n; s++) {
                if(numSize[s])
                    cout<<numSize[s]<<" square (s) of size "<<s<<endl;
            }
        }
        else cout<<"No completed squares can be found."<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值