当前位置: 首页 > news >正文

Week 1: Time Complexity, Rectangle Geometry

问题集

  • Square Pasture
  • Bucket Brigade
  • Blocked Billboard
  • Blocked Billboard II
  • Word Processor
  • Do You Know Your ABCs?
  • The Cow-Signal
  • D3C - White Sheet

视频解析

Square Pasture

Bucket Brigade

Blocked Billboard

Blocked Billboard II

Word Processor

Do You Know Your ABCs?

The Cow-Signal

D3C - White Sheet

参考代码

Square Pasture

#include <bits/stdc++.h>
using namespace std;

int main() 
{
    freopen("square.in" , "r" , stdin);
    freopen("square.out" , "w" , stdout);

    int x1 , y1 , x2 , y2;

    int x3 , y3 , x4 , y4;

    //第一个矩形农场的左下角和右上角坐标
    cin >> x1 >> y1 >> x2 >> y2;
    //第二个矩形农场的左下角和右上角坐标
    cin >> x3 >> y3 >> x4 >> y4;

    int cow , col;
    cow = abs(min(x1 , x3) - max(x2 , x4));
    col = abs(min(y1 , y3) - max(y2 , y4));

    int len = max(cow , col);

    cout << len * len;

    return 0;
}

Bucket Brigade

#include <bits/stdc++.h>
using namespace std;

char g[19][19];

int main()
{
    freopen("buckets.in" , "r" , stdin);
    freopen("buckets.out" , "w" , stdout);
    // 10 * 10 的地图
    for (int i = 1; i <= 10; i++)
        cin >> g[i] + 1;

    int barn_x , barn_y , tone_x , tone_y , lake_x , lake_y;

    for (int i = 1; i <= 10; i++)
    {
        for (int j = 1; j <= 10; j++)
        {
            if (g[i][j] == 'B')
                barn_x = i, barn_y = j; // 着火的谷仓
            if (g[i][j] == 'L')
                lake_x = i, lake_y = j; // 湖泊的位置
            if(g[i][j] == 'R')
                tone_x = i , tone_y = j;  //岩石的位置
        }
    }
    //初始的距离
    int step = abs(barn_x - lake_x) + abs(barn_y - lake_y) - 1;

    //考虑湖泊、岩石、谷仓在一行或一列的特殊情况
    if(barn_x == tone_x && tone_x == lake_x && (barn_y < tone_y && tone_y < lake_y || lake_y < tone_y && tone_y < barn_y))
        step += 2;
    else if(barn_y == tone_y && tone_y == lake_y && (barn_x < tone_x && tone_x < lake_x || lake_x < tone_x && tone_x < barn_x))
        step += 2;
    
    cout << step;
    return 0;
}

Blocked Billboard

#include<bits/stdc++.h>
using namespace std;

bool visable[2009][2009];

int main()
{
    freopen("billboard.in" , "r" , stdin);
    freopen("billboard.out" , "w" , stdout);

    //i=0 i=1为广告牌  i=2为卡车
    for(int i = 0; i < 3; i++)
    {
        int left_x , left_y , right_x , right_y;
        cin >> left_x >> left_y >> right_x >> right_y;

        //原来的坐标的范围为-1000~1000 现在变为0~2000
        left_x += 1000 , left_y += 1000 , right_x += 1000 , right_y += 1000;

        for(int x = left_x; x < right_x; x++)
            for(int y = left_y; y < right_y; y++)
                visable[x][y] = i < 2;   //广告牌的位置标记为true  被挡住的位置标记为false
    }
    //统计未被挡住的广告牌   面积 = 1*1的小方格乘以数量
    int ans = 0;
    for(int i = 0; i <= 2000; i++)
        for(int j = 0; j <= 2000; j++)
            ans += visable[i][j];
    cout << ans;
    return 0;
}

Blocked Billboard II

#include<bits/stdc++.h>
using namespace std;
int x3 , y3 , x4 , y4;
bool check(int x , int y)
{
    return x >= x3 && x <= x4 && y >= y3 && y <= y4;
}
int main()
{
    freopen("billboard.in" , "r" , stdin);
    freopen("billboard.out" , "w" , stdout);

    int x1 , y1 , x2 , y2;
    cin >> x1 >> y1 >> x2 >> y2;   //割草机的左下角和右上角坐标

    
    cin >> x3 >> y3 >> x4 >> y4;  //牛饲料的左下角和右上角坐标

    int cnt = 0;  //统计割草机被覆盖几个角
    cnt += check(x1 , y1);  //左下角
    cnt += check(x1 , y2);  //左上角
    cnt += check(x2 , y1);  //右下角
    cnt += check(x2 , y2);  //右上角

    if(cnt == 0 || cnt == 1)  //防水布为割草机的面积
        cout << (x2 - x1) * (y2 - y1);
    else if(cnt == 4)
        cout << 0;
    else if(cnt == 2)
    {
        //求覆盖的面积 割草机的面积减去覆盖的面积
        //得到覆盖矩形左下角和右上角的坐标
        int left_x = max(x1 , x3) , left_y = max(y1 , y3);
        int righ_x = min(x2 , x4) , right_y = min(y2 , y4);
        cout << (x2 - x1) * (y2 - y1) - (righ_x - left_x) * (right_y - left_y);
    }
    return 0;
}

Word Processor

#include <bits/stdc++.h>
using namespace std;

int main()
{
    freopen("word.in", "r", stdin);
    freopen("word.out", "w", stdout);

    int n, k;
    cin >> n >> k; // n个单词  每一行的字符数量不超过k

    string s[109];
    for (int i = 1; i <= n; i++) // n个单词
        cin >> s[i];

    int sum = 0;
    for (int i = 1; i <= n; i++)
    {
        sum += (int)s[i].size();

        if (sum <= k) // 可以放在一行
        {
            if(i != 1)
                cout << " ";
            cout << s[i];
        }
        else
        {
            cout << endl; // 单独开辟一行
            cout << s[i];
            sum = (int)s[i].size();
        }
    }
    return 0;
}

Do You Know Your ABCs?

#include <bits/stdc++.h>
using namespace std;

int main()
{   
    //freopen("in.txt" , "r" , stdin);
    //freopen("out.txt" , "w" , stdout);

    int a[8];
    for(int i = 1; i <= 7; i++)
        cin >> a[i];
    sort(a + 1 , a + 7 + 1);   //排序

    //A B C  A+B  B+C   A+C   A+B+C

    //因为 A<=B<=C 且都是正数

    //A+B+C 最大   最小的为A  第二小的为C  第三小的不一定为C   A+B也有可能小于C
    //最大的为A+B+C  减去A和B  就能得到C
    cout << a[1] << " " << a[2] << " " << a[7] - a[1] - a[2];


    return 0;
}

The Cow-Signal

#include <bits/stdc++.h>
using namespace std;

int main()
{
    freopen("cowsignal.in", "r", stdin);
    freopen("cowsignal.out", "w", stdout);

    int m, n, k;
    cin >> m >> n >> k;
    string g[11];

    for (int i = 0; i < m; i++) // 输入m*n的图片
        cin >> g[i];

    // 放大k倍
    for (int i = 0; i < m; i++)
    {
        int sum = k; 
        while (sum--)  //一行变k行
        {
            for (int j = 0; j < n; j++)
            {
                int ans = k;
                while (ans--)   //一列变k列
                    cout << g[i][j];
            }
            cout << endl;
        }
    }
    return 0;
}

D3C - White Sheet

#include <bits/stdc++.h>
using namespace std;

int main()
{
    // freopen("in.txt" , "r" , stdin);
    // freopen("out.txt" , "w" , stdout);

    int x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2; // 白色矩形

    int x3, y3, x4, y4;
    for (int i = 0; i < 2; i++)
    {
        cin >> x3 >> y3 >> x4 >> y4; // 黑色矩形

        // 黑色矩形完全覆盖的情况  1、单个就能覆盖  2、组合覆盖

        if (x3 <= x1 && x2 <= x4 && y3 <= y1 && y2 <= y4) // 一个黑色矩形就能完全覆盖
        {
            cout << "NO\n";
            return 0;
        }

        // 垂直拼接组合的情况
        if (y3 <= y1 && y2 <= y4) // 保证黑色的能圈住白色
        {
            if (x3 <= x1 && x1 <= x4) // 白色的左边被覆盖就不考虑了 更新左下角的横坐标
                x1 = x4;
            if (x3 <= x2 && x2 <= x4) // 白色的右边被覆盖就不考虑了 更新右上角的横坐标
                x2 = x3;
        }

        // 水平拼接组合的情况
        if (x3 <= x1 && x2 <= x4)
        {
            if (y3 <= y2 && y2 <= y4) // 白色的上边被覆盖 更新右上角的纵坐标
                y2 = y3;
            if (y3 <= y1 && y1 <= y4) // 白色的下边被覆盖 更新左下角的纵坐标
                y1 = y4;
        }
    }
    if (x1 < x2 && y1 < y2) // 存在未被覆盖到的地方
        cout << "YES\n";
    else
        cout << "NO\n";
    return 0;
}

相关文章:

  • 基于Termux的Android平台C++控制台程序开发指南
  • 速盾:高防CDN的原理和高防IP一样吗?
  • yum的基本操作和vim指令
  • 深翻页问题剖析与解决方案:原理与 Java 实践
  • 链表-算法小结
  • Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(一)
  • 《LNMP架构+Nextcloud私有云超维部署:量子级安全与跨域穿透实战》
  • 手动部署内网穿透
  • 有序数组的平方
  • 【云安全】云原生-centos7搭建/安装/部署k8s1.23.6单节点
  • 【开源项目】Excel手撕AI算法深入理解(二):Transformer
  • 头歌educoder——数据库 第10-11章
  • 对自己的优缺点评价
  • 导入 Excel 批量替换文件夹名称
  • MySQL 分区与分库分表策略
  • 【场景应用6】Autoformer在时间序列预测任务中的应用
  • LangGraph——Agent AI的持久化状态
  • 038-flatbuffers
  • ngx_set_worker_processes
  • 考研数据结构之串的模式匹配算法——KMP算法详解(包含真题及解析)
  • 2025年上海市防汛工作会议召开,龚正市长要求打好防汛备汛主动仗
  • 专访|导演王沐:希望听障家庭的声响被更多人听到
  • 歼-10CE首战大放异彩,聊聊中国战机海外实战的那些事儿
  • 演员朱媛媛去世,其丈夫辛柏青发讣告
  • 国家发改委:不断完善稳就业稳经济的政策工具箱,确保必要时能够及时出台实施
  • 证监会副主席李明:支持符合条件的外资机构申请新业务、设立新产品