AcWing 4454. 未初始化警告 (代码注释^^)
原题链接
简单
作者:
少吃点空气吧
,
2023-01-11 20:00:01
,
所有人可见
,
阅读 141
写个题解复习一下吧
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
bool x[N]; //保存所有被初始化过的数
int n,k;
/*
思路:
输入剩下k行时,有两个位置,一个左值一个右值,我们需要判断右值是不是没有被初始化过
只要当前这个右值曾经当过左值,那就说明它被初始化过了
那我们就只需要判断输入的两个数中,第二个数曾经有没有当过左值就可以了
但是我们还需要注意一点,那就是第二个数输入的是0的时候,那就默认这个式子是正确的
所以我们只需要用一个bool的数组保存所有第一个输入的就行,再判断第二个数是不是被初
始化过的(这里特殊处理一下第二个数是0的情况)
*/
int main()
{
cin>>n>>k;
int count=0; //计算不合理的式子有多少个(第二个数没有被初始化就说明这个式子不合理)
while(k--){
int a,b;
cin>>a>>b;
if(b==0){ //当第二个数是0的时候这个式子一定是合理的
x[a]=true;
continue;
}
if(!x[b]) //当第二个数没有被初始化的时候,说明这个式子不合理,那么count加1
count++;
x[a]=true; //第一个输入的数一定是被初始化过的
}
cout<<count;
return 0;
}