RC-u1 智能红绿灯
题意:为绿灯时,点击按钮后15s后转为红色持续30s,为红灯时再点击按钮则延长15s并只能延长一次,其它操作无效。
题解:模拟题,需要注意的是按下按钮后15s转为红灯后的点亮时间是闭区间,如第1s按下,红灯显示区间为[16, 45],在这个区间再次点击按钮时才能延长红灯时间。
代码:
// AC
#include <bits/stdc++.h>
using namespace std;
#define PII pair<int, int>
const int N = 1e4+10;
int a[N];
int n;
int flag, l, r, color;
vector<PII> v;
int main()
{
cin >> n;
for(int i = 0;i < n;i ++)
{
cin >> a[i];
int x = a[i];
if(i && a[i] == a[i-1]) continue;
// 绿转红
if(!color) {
l = x + 15;
r = l + 29;
flag = 0;
color = 1;
}
// 再次点击 注意红灯区间
else if(color && !flag && r >= x && l <= x) {
r = r + 15;
flag = 1;
}
// 红转绿
else if(color && r < x) {
color = 0;
if(!v.size() || v.back() != make_pair(l, r)) v.push_back(make_pair(l, r));
// 绿转红
l = x + 15;
r = l + 29;
flag = 0;
color = 1;
}
}
if(!v.size() || v.back() != make_pair(l, r)) v.push_back(make_pair(l, r));
for(int i = 0;i < v.size();i ++)
{
cout << v[i].first << ' ' << v[i].second << endl;
}
return 0;
}
RC-u2 女王的大敕令
题意:在5*5方格中给定终点,上下左右四个方向的怪物,在初始位置时,左右怪物顺时针移动相应行数后进行整行的激光覆盖,在移动一次位置后,上下怪物顺时针移动相应列数后进行整列的激光覆盖,您需要保证确定初始位置和移动一次后的位置,并且这两个位置不会被怪物的激光覆盖,然后可以通过指定步数到达终点。
题解:模拟题,需要注意的是初始位置时是左右两侧怪物移动,上下怪物位置保持不变,而第一次移动位置后是上下两侧怪物移动,左右怪物位置保持不变。我们可以推断出初始和第一次移动后的安全位置,然后4重循环枚举这两个位置,通过移动距离相等来判断是否满足条件,最后排序输出。
代码:
//AC
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int mp[6][6], mp2[6][6];
int c1, c2, r1, r2;
int n[5];
int r, c, d1, d2;
int idx;
struct node
{
int x, y, x2, y2;
}no[N];
bool cmp(node x, node y)
{
if(x.x == y.x && x.y == y.y && x.x2 == y.x2) return x.y2 < y.y2;
else if(x.x == y.x && x.y == y.y) return x.x2 < y.x2;
else if(x.x