您的位置:首页 > 其它

CodeVs 1134 && noip 2011 Day1 铺地毯

2014-10-19 09:40 267 查看
一开始秒想到的是暴力,然后写了暴力的50分..怎么说数据也是很水的...

/*
暴力的写法基本2-3分钟就能想到的做法,轻松水到50分
*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdlib>
using namespace std;
const int M=1005;
int map[M][M];
void solve(int sx, int st, int x, int y, int color)
{

for (int i=0; i<=x; i++)
for (int j=0; j<=y; j++)
map[sx+i][st+j]=color;
}
int main()
{
int n;
cin>>n;
memset(map, -1, sizeof(map));
for (int i=1; i<=n; i++)
{
int a, b, g, k;
cin>>a>>b>>g>>k;
solve(a, b, g, k, i);
}
int x, y;
cin>>x>>y;
cout<<map[x][y]<<endl;
return 0;
}


然后细心的想了一下,一般第一题都是模拟题,然后地毯是后的覆盖在前的,那么只需要判断从最后的地毯到最前的地毯有没有覆盖目标点就行了。

/*
倒过来看一下就知道了,如果点在范围内可以直接输出,第一题一般都是模拟题,只要细心想一下ac不是很难的事
*/

#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
const int M=100005;
int ans;
int n;
int x1[M];
int y1[M];
int x2[M];
int y2[M];
int main()
{
cin>>n;
int nn=n;
int j=0;
while (n--)
{
int a, b, g, k;
cin>>a>>b>>g>>k;
x1[++j]=a;
x2[j]=a+g;
y1[j]=b;
y2[j]=b+k;
}
int x, y;
ans=-1;
cin>>x>>y;
for (int i=nn; i>=1; i--)
{
if (x>=x1[i] && y>=y1[i] && x<=x2[i] && y<=y2[i]){
ans=i;
break;
}
}
cout<<ans<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: