L2-005 集合相似度
set的使用
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
typedef long long ll;
typedef pair<int,string> PII;
const int N=1e5+10,mod=1e9+7;
int n,m,k,x,y;
set<int>st[N];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",&m);
for(int j=1;j<=m;j++){
scanf("%d",&x);
st[i].insert(x);
}
}
scanf("%d",&k);
while(k--){
scanf("%d%d",&x,&y);
int cnt=0,sum=0;
for(auto i:st[x]){
if(st[y].find(i)!=st[y].end()) cnt++;
}
sum=st[x].size()+st[y].size()-cnt;
double ans=cnt*1.0/sum;
ans*=100;
printf("%.2lf%\n",ans);
}
return 0;
}
L2-009 抢红包
排序
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
typedef long long ll;
typedef pair<int,double> PII;
const int N=1e5+10,mod=1e9+7;
int n,k,x,y;
struct node {
int id,cnt;
double num;
}a[N];
bool cmp(node x,node y){
if(x.num==y.num){
if(x.cnt==y.cnt) return x.id<y.id;
return x.cnt>y.cnt;
}
return x.num>y.num;
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;
a[i].id=i;
int sum=0;
for(int j=1;j<=k;j++){
cin>>x>>y;
sum+=y;
a[x].cnt++;
a[x].num+=y*1.0/100;
}
a[i].num-=sum*1.0/100;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++) printf("%d %.2lf\n",a[i].id,a[i].num);
return 0;
}