【简单题】-POJ-3802-Cubist Artwork

这篇博客分享了解决POJ 3802 - Cubist Artwork问题的思路和过程。作者提到题目要求根据主视图和右视图确定最少需要的方块数量,通过行列变换优化问题并进行遍历求解。虽然题目简单,但在比赛中耗费了一些时间,事后回看发现解题并不困难,最终实现AC代码。

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

题目链接:http://poj.org/problem?id=3802

题目描述:给出主视图和右视图,问最少需要多少个方块

解题思路:

题目里有提示,行列变换不会影响结果,所以不妨先排一下序(没啥用,为了看着舒服)

在行数组里遍历,如果列数组那边有和行数组一样的数,说明这个xoy平面点上只需要w[ i ] 个方块就可以了

注意标记一下和break,不然就不对了


挺简单的题,不过比赛时候想了半天才有头绪,事实上最后还是成希凡敲出来的

事后诸葛亮....今早起来突然想起这题还没自己写过,几分钟就写完了 = =

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

int w[12],d[12],vis[12];

int main()
{
    freopen("input.txt","r",stdin);
    int m,n,i,j;
    while(cin>>m>>n,m||n)
    {
        memset(w,0,sizeof(w));
        memset(d,0,sizeof(d));
        memset(vis,0,sizeof(vis));
        int sum=0;
        for(i=0;i<m;i++)
        {
            cin>>w[i];
            sum+=w[i];
        }
        for(i=0;i<n;i++)
        {
            cin>>d[i];
            sum+=d[i];
        }
        sort(w,w+m);
        sort(d,d+n);
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                if(w[i]==d[j]&&!vis[j])
                {
                    sum -= w[i];
                    vis[j]=1;
                    break;
                }
            }
        }
        cout<<sum<<endl;
    }
    return 0;
}
AC截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值