『题解』Luogu P8086 『JROI-5』Music
题目大意
给定 \(n\) 条听歌记录,每条给定两个整数 \(x,t\),表示听了编号为 \(x\) 的歌 \(t\) 分钟。总听歌时间为所有有效记录的 \(t\) 的总和。
若 \(t \le 1\) 那么这条记录是无效的。
对于某首歌,只有第一条有效记录会被计算,重复听的记录无效
思路
挺良心的一道签到题。蒟蒻除了这题都不会做啊。
用一个数组 \(m\) 来标记这首歌是否记录过。注意,若当前记录无效,则不标记 \(m_x\),也不累加 \(t\)。
那么,对于每条听歌记录,只需先判断无效情况,之前是否记录过,若都为假,那么就标记,累加,最后输出累加结果即可。
代码
#include <iostream>
using namespace std;
typedef long long ll;
int n,x,t,m[100000005];
ll ans;
int main(){
cin >> n;
while(n--){
cin >> x >> t;
if(t<=1) continue; // 无效
if(m[x]) continue; // 记录过
m[x]=1; // 标记&累加
ans+=t;
}
cout << ans << endl;
return 0;
}