打卡信奥刷题(1434)用C++实现信奥 P4670 [BalticOI 2011] Plagiarism (Day2)

P4670 [BalticOI 2011] Plagiarism (Day2)

题目描述

世界编程竞赛的参与者向评分系统提交了 N N N 个解决方案文件 f 1 , . . . , f N f_1 ,...,f_N f1,...,fN。在接受结果为最终结果之前,评审团希望排除任何抄袭的可能性。他们有一个程序,可以将两个文件进行比较,以决定它们是否过于相似。然而,文件的数量相当大,比较所有对将花费太多时间。另一方面,许多对可以基于文件大小差异过大而快速排除。更确切地说,评审团决定完全跳过比较每一对,其中较小文件的大小小于较大文件大小的 90%。因此,比较程序只需检查那些不同的文件对 ( f i , f j ) (f_i, f_j) (fi,fj),其中 i ≠ j , s i z e ( f i ) ≤ s i z e ( f j ) i \ne j, size(f_i) \le size(f_j) i=j,size(fi)size(fj) s i z e ( f i ) ≥ 0.9 × s i z e ( f j ) size(f_i) \ge 0.9 \times size(f_j) size(fi)0.9×size(fj)。编写一个程序来计算需要检查的文件对的数量。

输入格式

输入的第一行包含整数 N N N,表示提交的解决方案文件的数量。第二行包含 N N N 个整数 s i z e ( f 1 ) , ⋯   , s i z e ( f N ) size(f_1),\cdots,size(f_N) size(f1),,size(fN),每个整数表示一个文件的大小。

输出格式

输出的第一行且唯一一行必须包含一个整数,即需要检查的文件对的数量。

输入输出样例 #1

输入 #1

2
2 1

输出 #1

0

输入输出样例 #2

输入 #2

5
1 1 1 1 1

输出 #2

10

说明/提示

对于 50 % 50\% 50% 的数据, 1 ≤ N ≤ 2000 1 \le N \le 2000 1N2000。对于所有数据, 1 ≤ N ≤ 10 5 , 1 ≤ f i ≤ 10 8 1 \le N \le 10^5,1 \le f_i \le 10^8 1N105,1fi108

题面翻译由 ChatGPT-4o 提供。

C++实现

#include"cstdio"
#include"algorithm"
int n,s,f[100001];
bool cmp(int x,int y){
    return x>y;
}
int main(){
    scanf("%d",&n);
    for(register int i=1;i<=n;i++)scanf("%d",&f[i]);
    std::sort(f+1,f+1+n,cmp);
    for(register int i=1;i<=n;i++){
        for(register int j=i+1;j<=n;j++){
            if(f[j]>=0.9*f[i])s++;
        }
    }
    printf("%d",s);
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值