zoukankan      html  css  js  c++  java
  • P1003 铺地毯

    P1003 铺地毯<<点击查看题目=w=

    本来想的是扫一遍,然后完美爆掉了内存

    原代码:

    #include<bits/stdc++.h>
    #define MAXN 10005
    using namespace std;
    
    int n,x,y;
    int ans[MAXN][MAXN];
    struct ditan
    {
        int a,b,g,k;
    }di[MAXN];
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>di[i].a >>di[i].b >>di[i].g >>di[i].k ;
        cin>>x>>y;
        for(int i=1;i<=n;i++)
            for(int j=0;j<=di[i].g ;j++)
                for(int l=0;l<=di[i].k ;l++)
                    ans[di[i].a +j][di[i].b +l]=i;
        if(ans[x][y])
            cout<<ans[x][y]<<endl;
        else
            cout<<"-1"<<endl;
        return 0;
    }

    好的可以开始重新写了

    那我不开这个二维数组就行了= =直接拿坐标来存。

    先写个函数判断目标点是否被地毯覆盖

    int qujian(int a,int b,int c )//b<=c
    {
        if(a>=b&&a<=c)    return 1;
        else return 0;
    }

    然后从后往前判断目标点是否被地毯覆盖;

    #include<bits/stdc++.h>
    #define MAXN 10005
    using namespace std;
    
    int n,x,y;
    int qujian(int a,int b,int c )//b<=c
    {
        if(a>=b&&a<=c)    return 1;
        else return 0;
    }
    struct dtt
    {
        int a,b,g,k;
    }dt[MAXN];
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>dt[i].a >>dt[i].b >>dt[i].g >>dt[i].k ;
        cin>>x>>y;
        int i;
        for( i=n;i>=1;i--)
            if(qujian(x,dt[i].a ,dt[i].a +dt[i].g )&&qujian(y,dt[i].b,dt[i].k +dt[i].b )) break;
                
        if(i) 
            cout<<i<<endl;
        else
            cout<<"-1"<<endl;
        return 0;
    }
  • 相关阅读:
    使用ConcurrentHashMap需要知道的细节
    并查集(Union-Find)
    LeetCode2
    补充之前博客的几种排序--希尔排序、堆排序、归并排序
    左式二叉堆
    优先队列的一种实现--堆ADT
    开放地址法散列表ADT
    分离链表法散列ADT
    AVL树
    二叉查找树ADT--C语言描述
  • 原文地址:https://www.cnblogs.com/lizinuo/p/9455070.html
Copyright © 2011-2022 走看看