zoukankan      html  css  js  c++  java
  • [CF1453C] Triangles

    [CF1453C] Triangles - 构造

    Description

    给一个矩阵,每个元素都是 1−9,对每个 d,选三点都是 d 的,问组成最大的三角形面积多大,每个 d ,都可以把一个数字改成 d,然后算完在改回去。

    Solution

    一开始读错题了,以为不能把 d 改成 d,也不知道怎么就在 allowed 前面脑补了一个 not,然后大脑炸胡……,跳去切 D 了

    这种带构造性质的东西,我们的想法是去提供一个不会比最优解更劣,同时又比较简便的方案

    我们钦定底是和坐标轴平行的,那么高也是平行的

    假设现在随便选了一个点 A 做底的一个顶点,找一个点 B 做高的顶点,然后我们去修改另一个 C 做底的另一个顶点

    这样处理起来比较简单,我们只需要记录每种颜色出现的 i,j 的最大最小值,四种情况,高就很容易算出来,而 AC 的长度是任意的,我们直接把 C 怼到边界上即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int t;
        cin >> t;
    
        while (t--)
        {
            int n;
            cin >> n;
    
            vector<vector<int>> a(n + 2, vector<int>(n + 2));
            for (int i = 1; i <= n; i++)
            {
                string str;
                cin >> str;
                for (int j = 1; j <= n; j++)
                    a[i][j] = str[j - 1] - '0';
            }
    
            vector<int> imax(11, -1), jmax(11, -1), imin(11, n + 1), jmin(11, n + 1);
            for (int i = 1; i <= n; i++)
            {
                for (int j = 1; j <= n; j++)
                {
                    imax[a[i][j]] = max(imax[a[i][j]], i);
                    imin[a[i][j]] = min(imin[a[i][j]], i);
                    jmax[a[i][j]] = max(jmax[a[i][j]], j);
                    jmin[a[i][j]] = min(jmin[a[i][j]], j);
                }
            }
    
            vector<int> ans(11);
    
            for (int i = 1; i <= n; i++)
            {
                for (int j = 1; j <= n; j++)
                {
                    if (imin[a[i][j]] <= n)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(imin[a[i][j]] - i) * (j - 1));
                    if (imin[a[i][j]] <= n)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(imin[a[i][j]] - i) * (n - j));
                    if (imax[a[i][j]] > 0)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(imax[a[i][j]] - i) * (j - 1));
                    if (imax[a[i][j]] > 0)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(imax[a[i][j]] - i) * (n - j));
                    if (jmin[a[i][j]] <= n)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(jmin[a[i][j]] - j) * (i - 1));
                    if (jmin[a[i][j]] <= n)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(jmin[a[i][j]] - j) * (n - i));
                    if (jmax[a[i][j]] > 0)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(jmax[a[i][j]] - j) * (i - 1));
                    if (jmax[a[i][j]] > 0)
                        ans[a[i][j]] = max(ans[a[i][j]], abs(jmax[a[i][j]] - j) * (n - i));
                }
            }
    
            for (int i = 0; i < 10; i++)
                cout << ans[i] << " ";
            cout << endl;
        }
    }
    
  • 相关阅读:
    MODULE_AUTHOR、MODULE_DESCRIPTION、MODULE_LICENSE宏
    Django-RQ首页、文档和下载
    Uncode-Schedule首页、文档和下载
    Kibana+Logstash+Elasticsearch 日志查询系统
    京东集团副总裁李大学:像CEO一样思考
    刘宇(正和磁系资本创始人)_百度百科
    京东离职员工成立“东成西就”微信群 前高管赵国庆李大...
    李大学:互联网裂变里最重要的是资金流|正和岛|正和岛联席总裁黄丽陆|2015正和岛东部(海宁)论坛_新浪财经_新浪网
    nopcommerce中文网
    Getting Started · Building a RESTful Web Service
  • 原文地址:https://www.cnblogs.com/mollnn/p/14498395.html
Copyright © 2011-2022 走看看