题目来源:https://ac.nowcoder.com/acm/problem/16593
hello
思路:
就是把每一组地毯存到二维数组里,一行代表一张地毯。
然后自上而下判断某点的地毯,得到的马上break,就是最上面的。
首先进行存储:
int n,res; cin>>n; int a[10000][10000]; for(int i=0;i<n;i++){ for(int j=0;j<4;j++){ cin>>a[i][j]; } }
|
自上而下进行check操作,判断某张毯子是否是答案:
int x,y; cin>>x>>y; for(int i=n-1;i>=0;i--){ if(check(a[i],x,y)){ res=i; break; } }
|
check稍微用了一下指针,也可以直接用下标的:
bool check(int* p,int x,int y){ if((*p<=x&&(*(p+2)+*p)>=x)&&(*(p+1)<=y&&(*(p+3)+*(p+1)>=y))){ return 1; } return 0; }
|
输出答案需要+1,因为毯子从1开始:
就OK辽!
#include<bits/stdc++.h> using namespace std; bool check(int* p,int x,int y){ if((*p<=x&&(*(p+2)+*p)>=x)&&(*(p+1)<=y&&(*(p+3)+*(p+1)>=y))){ return 1; } return 0; } int main(){ int n,res; cin>>n; int a[10000][10000]; for(int i=0;i<n;i++){ for(int j=0;j<4;j++){ cin>>a[i][j]; } } int x,y; cin>>x>>y; for(int i=n-1;i>=0;i--){ if(check(a[i],x,y)){ res=i; break; } } cout<<res+1; return 0; }
|