目录
一、铺地毯



答案如下:
cpp
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N],b[N],g[N],k[N];
int x,y;
int n;
int find()
{
for(int i = n; i >= 1; i--)
{
if(x>=a[i] && x<=a[i]+g[i] && y>=b[i] && y<=b[i]+k[i])
{
return i;
}
}
return -1;
}
int main()
{
cin >>n;
for(int i = 1; i<=n; i++)
{
cin >> a[i] >> b[i] >> g[i] >> k[i];
}
cin >> x >> y;
cout << find() <<endl;
return 0;
}
二、回文日期

答案如下:
cpp
#include<iostream>
using namespace std;
int x,y;
int day[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{
cin >> x >> y;
int ret = 0;
for(int i = 1; i <= 12; i++)
{
for(int j = 1; j <= day[i]; j++)
{
int k = j%10 * 1000 + j/10*100 + i%10*10 + i/10;
int num = k*10000 + i*100 + j;
if(x <= num && num <= y)
{
ret++;
}
}
}
cout << ret << endl;
return 0;
}
三、扫雷

答案如下:
cpp
#include<iostream>
using namespace std;
const int N = 1e4 + 10;
int a[N],b[N];
int n;
int check1()
{
a[1] = 1;
for(int i = 2; i <= n+1; i++)
{
a[i] = b[i-1] - a[i-1]- a[i-2];
if(a[i] < 0 || a[i] > 1)
{
return 0;
}
}
return a[n+1] == 0;
}
int check2()
{
a[1] = 0;
for(int i = 2; i <= n+1; i++)
{
a[i] = b[i-1] - a[i-1]- a[i-2];
if(a[i] < 0 || a[i] > 1)
{
return 0;
}
}
return a[n+1] == 0;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> b[i];
}
int ret = 0;
ret += check1(); //首位置放地雷
ret += check2(); //首位置不放地雷
cout << ret << endl;
return 0;
}