T1
题目大意
给出两个人对于 “ 昨天、今天、明天 ” 的描述,其中,每个人仅提供一个正确信息。确定 “ 今天 ” 到底是星期几,并给出两人的正确信息是哪个维度。
这题我的方法很烂,虽然能过,但是有点费时
#include
#include
using namespace std;
int main() {
int a[3], b[3];
string ans[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
cin >> a[0] >> a[1] >> a[2] >> b[0] >> b[1] >> b[2];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (a[i] - b[j] == i - j || a[i] - b[j] + 7 == i - j || a[i] - b[j] - 7 == i - j) {
int flag = 0;
for (int p = 0; p < 3; p++)
if (p != i && (a[p] - a[i] == p - i || a[p] - a[i] + 7 == p - i || a[p] - a[i] - 7 == p - i)) flag = 1;
for (int p = 0; p < 3; p++)
if (p != j && (b[p] - b[j] == p - j || a[p] - a[j] + 7 == p - j || a[p] - a[j] - 7 == p - j)) flag = 1;
if (!flag) {
int ret = a[i];
if (i == 2) ret = (ret + 6) % 7;
else if (!i) ret = (ret + 1) % 7;
printf("%sn", ans[ret].c_str());
if (!i) printf("yesterdayn");
else if (i == 1) printf("todayn");
else printf("tomorrown");
if (!j) printf("yesterdayn");
else if (j == 1) printf("todayn");
else printf("tomorrown");
return 0;
}
}
}
T2
题目大意
模拟操作系统中的LRU机制,即最近最少使用(Least Recently Used),选择最近最久未使用的页面予以替换。
出于个人习惯,我很喜欢使用stl。这题直接用map进行
#include
#include
#include
#include
#include
#include
#include
T3
题目大意
给出一个有向图,询问某序列是否能够通过dfs该图得到。注意,每个节点仅被遍历一次,非连通图中可以有多个dfs起点。
这题我一开始以为不能够写dfs递归求解,害怕会爆栈www 结果是我想多了
不过我在做的时候还是写的循环。方法依赖于出度和stack以及dfs的过程。
#include
#include
#include
#include
#include
#include
#include
T4
题目大意
有一棵完全d叉树,给出前序遍历,构造该树的层次遍历和父子关系。
这题相对比较简单? 一开始理解错了degree的含义,后来猜到是完全d叉树之后,先预处理了一下每行会有多少个节点,然后就是直接建树求解了。
初始代码:
#include
#include
后来优化之后的代码:
#include
#include
using namespace std;
const int N = 110;
int pre[N], a[N], n, m, k, x;
void init(int p,int pos) {
if (pos >= n) return;
int t;
cin >> t;
pre[t] = p;
a[pos] = t;
for (int i = 1; i <= m; i++) init(t, pos * m + i);
}
int main() {
cin >> n >> m;
init(-1,0);//初始化 先序遍历顺带输入数据并配对好父节点以及处理层序遍历的结果
for (int i = 0; i < n; i++)
if (i != n - 1) printf("%d ", a[i]);//a数组里存的就是层序遍历的结果
else printf("%dn", a[i]);
cin >> k;
while (k--) {
cin >> x;
x = a[x];
while (x != a[0]) printf("%d ", x), x = pre[x];
printf("%dn", x);
}
return 0;
}
总结:
感觉这次的难度有点小低? 比模拟题难度低