一发罚时让我狠狠的掉了一波分…不然感觉靠手速能吃波烂分
1. 不同正整数的个数
没啥好说的吧,注意别把0算进去就行
#include<bits/stdc++.h>
using namespace std;
set<int> s;
int main()
{
int n;
cin >> n;
while (n --)
{
int k;
cin >> k;
if (k) s.insert(k);
}
cout << s.size();
return 0;
}
2. 最短路径
每走一步就会使上下左右四个方向的格子加1,在一个足够大的方格内模拟每一步,如果走到了一个值大于1的格子内,则说明这个格子会使路线上的某两点连接,就无法构造出最优路线,别忘了初始化一下起点是1,不然会出现"UD"
的特殊情况错误
#include<bits/stdc++.h>
using namespace std;
const int N = 250;
int st[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int main()
{
string s;
cin >> s;
int x = 120, y = 120;
st[x][y] ++;
for (int i = 0;i < 4;i ++) st[x+dx[i]][y+dy[i]] ++;
for (char a : s)
{
if (a == 'U') x --;
if (a == 'D') x ++;
if (a == 'L') y --;
if (a == 'R') y ++;
if (st[x][y] > 1)
{
cout << "NO";
return 0;
}
for (int i = 0;i < 4;i ++) st[x+dx[i]][y+dy[i]] ++;
}
cout << "YES";
return 0;
}