A. Doors and Keys
做一个简单的判断,如果在骑士遇到某扇门前没有对应的钥匙,那么就无法进入。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
string a;
cin >> a;
int condition = 0;
bool isr = false, isb = false, isg = false;
for (int i = 0; i < a.size(); i++)
{
if (a[i] == 'r')
isr = true;
else if (a[i] == 'b')
isb = true;
else if (a[i] == 'g')
isg = true;
else if (a[i] == 'R' && !isr)
{
condition = 1;
break;
}
else if (a[i] == 'B' && !isb)
{
condition = 1;
break;
}
else if (a[i] == 'G' && !isg)
{
condition = 1;
break;
}
}
if (condition == 0)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
B. Anti-Fibonacci Permutation
题意要求输出n串不满足斐波那契的数列。
首先很容易想到一个序列:n,n-1,n-2,…1。这个序列的每一项都小于前一项,所以一定不满足。
然后只需要对这个序列进行操作即可,每次交换a[0]与a[i](相当于每次都将a[0]向前挪一位),对于除了a[0]以外的数,仍能够构成递减序列,而a[0]所能满足斐波那契性质的数a[1]与a[n-1]永远无法相邻,正好能够得到n串符合题意的序列。
最后举个例子:
4、3、2、1
3、4、2、1
3、2、4、1
3、2、1、4
可以看出,3、1、4这三个数永远无法相邻。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <algorithm>
#include <vector>
#include <cstring>
#include <cstdlib>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int a[n];
int number = n;
for (int i = 0; i < n; i++)
a[i] = number--;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << a[j] << " ";
cout << endl;
swap(a[0], a[i + 1]);
}
}
return 0;
}