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;
    }
  • 相关阅读:
    HashSet
    HashMap
    commons-configuration读取配置文件
    JAVA多线程和并发基础面试问答(转载)
    集合
    java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系
    七段数码管绘制
    函数的定义与使用
    程序的分支控制
    文本进度条
  • 原文地址:https://www.cnblogs.com/lizinuo/p/9455070.html
Copyright © 2011-2022 走看看