ccf--仓库规划

问题描述

西西艾弗岛共有 n个仓库,依次编号 1⋯n。每个仓库均一个 m 维向量的位置编码,用来表示仓库间的物流运转关系。

 思路:

其实就三个for循环去解决,首先第一个for循环,就是到谁就找到其所对应的仓库 1到n

第二个for循环就是去找到除了该行之外的其他行 也是1到n

第三个for循环就就是对于两个行之间的各个维度的比较(因为比较乱,所以单独作为函数,调用)

代码:100分

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int arr[1000][10];
int n, m;
bool slove(int i, int j) {
	int  a;
	int count = 0;
	for (a = 0; a < m; a++) {
		if (arr[i][a] < arr[j][a]) {
			count++;
		}
	}
	return (count == m) ? true : false;
}
int main() {
	
	cin >> n >> m;
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			cin >> arr[i][j];
		}
	}
	for (i = 0; i < n; i++) {
		int b = 0;
		for (j = 0; j < n; j++) {
			if (slove(i, j)) {
				b = j;
				break;
			}
		}
		cout << b << endl;
	}
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以先计算出每块田地的面积,再判断其是否与目标矩形有交集,如果有交集则计算交集面积,最后将所有有交集的田地面积相加即可。 具体实现步骤如下: 1.读入已存在的田地坐标和目标矩形坐标。 2.计算每块田地的面积。 3.判断每块田地是否与目标矩形有交集,若有则计算交集面积。 4.将所有有交集的田地面积相加,得到总面积。 以下是C++代码实现: ```c++ #include <iostream> #include <algorithm> using namespace std; int main() { int n; cin >> n; // 输入已存在的田地数目 int x1[n], y1[n], x2[n], y2[n]; for (int i = 0; i < n; i++) { cin >> x1[i] >> y1[i] >> x2[i] >> y2[i]; // 输入每块田地的左下角和右上角坐标 } int x, y, w, h; cin >> x >> y >> w >> h; // 输入目标矩形的左下角和右上角坐标 long long area = 0; // 总面积 for (int i = 0; i < n; i++) { // 计算每块田地的面积 long long cur_area = 1LL * (x2[i] - x1[i]) * (y2[i] - y1[i]); // 判断田地是否与目标矩形有交集 if (x2[i] <= x || x1[i] >= x + w || y2[i] <= y || y1[i] >= y + h) { continue; // 没有交集,跳过 } int overlap_x1 = max(x1[i], x); // 计算交集的左下角坐标 int overlap_y1 = max(y1[i], y); int overlap_x2 = min(x2[i], x + w); // 计算交集的右上角坐标 int overlap_y2 = min(y2[i], y + h); long long overlap_area = 1LL * (overlap_x2 - overlap_x1) * (overlap_y2 - overlap_y1); // 计算交集面积 area += overlap_area; // 累加有交集的田地面积 } cout << area << endl; // 输出总面积 return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值