cf12.4

cf div.2 #668

C题目

题意

给一个数字矩阵,对于每一个数,可以任意选两个数,加自己构造的一个点,组成三角形,问什么情况,三角形面积 * 2最大。

(这个三角形要求,至少有一条边平行于x轴或者y轴)

题解

这种三角形面积 * 2是 ∣ x a − x b ∣ ∗ ∣ y a − y c ∣ |x_a - x_b| * |y_a - y_c| xaxbyayc

我原本考虑最角落4个点,but实现有点问题。

可以考虑每行的点,把所有 ∣ x a − x b ∣ |x_a - x_b| xaxb记录下来,再找面积最大的。

仔细来说:

对于某个数,记录横纵坐标最大最小值,

遍历每个等于这个数的点,与横纵坐标最大最小值的点找最大三角形的底和高


在这里插入图片描述

//是我没有想到过的,重点还是发现这个问题算面积只需找到底和高

提一嘴

一串无空格的字符串,无需用字符输入

可以scanf("%1d", &mp[i][j]);

#include <bits/stdc++.h>
using namespace std;
const int MAX = 2e3 + 10;
const int INF = 1e5 + 10;
int mp[MAX][MAX];
int n;
int ans[12];
inline void solve() {
    int maxx[12], mppinx[12];
	int maxy[12], miny[12];
	fill(ans, ans + 12, 0);
	fill(maxx, maxx + 12, -1); fill(maxy, maxy + 12, -1);
	fill(minx, minx + 12, INF); fill(miny, miny + 12, INF);
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            int d = mp[i][j];
            maxx[d] = max(maxx[d], i);
            minx[d] = min(minx[d], i);
            maxy[d] = max(maxy[d], j);
            miny[d] = min(miny[d], j);
        }
    }
	for(int i = 1; i <= n; i++) {
   		for(int j = 1; j <= n; j++) {
   			int d = mp[i][j];
   			int res = max(n - j, j - 1) * max(maxx[d] - i, i - minx[d]);
   			ans[d] = max(ans[d], res);
   			res = max(n - i, i - 1) * max(maxy[d] - j, j - miny[d]);
   			ans[d] = max(ans[d], res);
		}	
	}
}
int main() {
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) {
        	for(int j = 1; j <= n; j++) 
        		scanf("%1d", &mp[i][j]);
		}
        solve();
        for(int i = 0; i < 10; i++) {
            printf("%d ", ans[i]);
        }
        cout << endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值