AcWing 4454. 未初始化警告【全程注释解析,能看懂就真的理解了!】
原题链接
简单
作者:
MQy
,
2023-01-09 21:25:10
,
所有人可见
,
阅读 148
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
// 一道很简单的模拟题,没什么好说的,难点 在于是否读懂了题?
/*
题目的意思是:
1. a0 就是常数,而且只有这一个常数。能作为初始化变量的值!
2. 若一个变量没有用 a0 进行正常的初始化,那么系统也会给它分配一个随机的数给它初始化。(垃圾数据嘛,我们都知道)
也就是说,没正常进行初始化的那些 变量,在此之后,也应该标记为 被初始化过(系统给它初始化了)
3. 若 ai = 右值, 这个右值未初始化过,那么 这次赋值就是有问题的!出错次数 + 1 (但是也别忘了,系统会给这个变量初始化的)
(所以下次 再遇到 ai 的时候,ai 就已经算是初始化过的值了。)
好了,你现在可以去写代码了。。很简单 ~ 跟语法题意义 。。
*/
bool vis[N]; // 是否被初始化过
int main()
{
int n, k;
int cnt = 0;
cin >> n >> k;
while(k--){
int x, y;
scanf("%d%d", &x, &y);
if(y == 0 && !vis[x]){ // 若 a[xi] 没有被初始化过,那么就应该 初始化!
vis[x] = true;
}else if(y != 0 && !vis[y]){
cnt++;
vis[x] = true; // 标记一下 初始化过了。
}else if(y != 0 && vis[y]){
vis[x] = true;
}
}
cout << cnt << endl;
return 0;
}