首页 > 其他分享 >zzszoi20221015

zzszoi20221015

时间:2022-10-17 23:44:05浏览次数:59  
标签:拍照 zzszoi20221015 T4 T2 T3 long leq

20221015 zzsz模拟赛第一轮

author: zzafanti(FreshOrange)

请勿转载

总述

作为zzsz上线OJ以来的第一场比赛,不出意外地出了些意外。比赛必须在开始前报名,这使得一些同学痛失准时参赛机会。

学校紧急又建了一个重建赛,\(15:30\)开始,做出了一个补救。

这也提醒我们:准时报名!!!!!!! (注意csp是否缴费);

\(print\)("准时是对守时的尊重。——\(Miss Llj\)")

这次比赛难度较为一般,思维难度不是非常大,努努力把控好细节\(300pts+\) 应该是会太难的。

鹅而我\(T2\)挂了……

image

\(T2\)明显的思维漏洞,没有发现(其实很好举出反例(虽然希望下次比赛可以给大样例QwQ))

\(T3\)挂了\(50pts\),考虑到确实对自己的想法没啥把握,这个扣分也在可接受范围内吧……

(注意:题目难易顺序从简到繁依次大概是 T4,T2,T1,T3,这也是一个可以参考的做题顺序)

共20多名同学参赛

\(T4\) A掉了6人,一个“排队接水”型贪心的板题。

\(T2\) A掉3人,但是有两人代码完全相同……这……

\(T1\) A掉1人,有几个 \(TLE\) 3个点的同学。

\(T3\) 最高\(50pts\),其他是骗分……

题解

\(T4\) -拍照(注意!题目1~4并非安难易排序)

问题描述:

ZZSZ是个美丽的学校,有很多值得拍照记录的地方。有一天,你和你的小伙伴来到了ZZSZ美丽的校园,有一处很有纪念意义的地方,你们都想拍照记录。总共有\(N\)个人,大家排好队,一个个去拍照。每个人拍照的时间是不一样的,有的想拍成艺术照珍藏,有的只是想表明到此一游。

为了节省大家的时间,请你设计一个排队方案,让所有人等待的时间总和最少。

输入格式:

第一行一个整数\(N\),表示有\(N\)个同学。

第二行包含\(N\)个整数,表示每个人的拍照时间。

输出格式:

输出所有人等待时间的最小值。

输入样例:

5 
2 3 1 5 4

输出样例:

20

数据范围
对于 100%的数据满足:\(1\leq N\leq50000\),每个人的等待时间小于等于\(100000\)。

分析

以\(a_i\)表示第\(i\)个人接水的时间

则对于\(p\)(\(1\leq p \leq n-1\)),\(a_p\)与\(a_{p+1}\)对答案的贡献为
\(a_p*(n-p)+a_{p+1}*(n-p-1)\)

显然 \(n-p>n-p-1\)

若 \(a_{p+1}\leq a_p\)

\(a_p*(n-p)+a_{p+1}*(n-p-1)\)一定大于等于\(a_{p+1}*(n-p)+a_p*(n-p-1)\)

即,将相邻两项中的较小数排在前,可保证这两数对答案贡献最小

考虑整个序列\(a\),

只需将其从小到大排序,依次计算每一项对答案的贡献,求和即可

记得开long long

时间复杂度\(O(nlogn)\),瓶颈在排序

参考代码

typedef long long ll;
const int N=50100;
ll a[N],n,res;
void solve(){
    cin >> n;
    for(int i=0; i<n; i++) scanf("%d",&a[i]);
    sort(a,a+n);
    for(int i=0; i<n-1; i++){
        res+=a[i]*(n-i-1);
    }
    cout<< res<<endl;
}

update: 20221017

标签:拍照,zzszoi20221015,T4,T2,T3,long,leq
From: https://www.cnblogs.com/FreshOrange/p/16801167.html

相关文章