返回题解分享
讨论 / 题解分享/ 帖子详情

天穹之塔 - 题解

首先,本题的纯模拟代码:

#include<cstdio>
#include<iostream>
#include<vector>
#include<map>
#include<cstring>
#include<string>
#include<array>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<sstream>
#include<unordered_set>
#include<unordered_map>
using namespace std;
using i64=long long;
using ui=unsigned int;
//using i128=__int128;
const int INF=1e9;
//const i64 INT=F=1e18;
//const int mod=998244353;
const int mod=80112002;
//const int N=1e9+7;
void solve(){
    int n,k,q;
    cin>>n>>k>>q;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++)a[i]=k;
    while(q--){
        int x;
        cin>>x;
        for(int i=1;i<=n;i++){
            if(i!=x)a[i]--;
        }
    }
    cout<<'\n';
    for(int i=1;i<=n;i++){
        if(a[i]>0)cout<<"Yes"<<'\n';
        else cout<<"No"<<'\n';
    }
}
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _=1;
    //cin>>_;
    while(_--)solve();
    return 0;
}

优化思路:可以将q次查询的数,每一个数都加1,之后再将它们减去q次查询判断即可
代码:

#include<cstdio>
#include<iostream>
#include<vector>
#include<map>
#include<cstring>
#include<string>
#include<array>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<sstream>
#include<unordered_set>
#include<unordered_map>
using namespace std;
using i64=long long;
using ui=unsigned int;
//using i128=__int128;
const int INF=1e9;
//const i64 INT=F=1e18;
//const int mod=998244353;
const int mod=80112002;
//const int N=1e9+7;
void solve(){
int n,k,q;
cin>>n>>k>>q;
int q1=q;
vector<int>a(n+1);
for(int i=1;i<=n;i++)a[i]=k;
while(q--){
int x;
cin>>x;
a[x]++;
}
for(int i=1;i<=n;i++){
a[i]-=q1;
if(a[i]>0)cout<<"Yes"<<'\n';
else cout<<"No"<<'\n';
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
//cin>>_;
while(_--)solve();
return 0;
}
```
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!