ccpc秦皇岛部分题解

A.

题意:就是有一个大桌子,环绕有顺势站1~m共m个座位,n个选手坐在部分位置上。然后如果有一个人a了一道题,却没有立刻发气球给他,他产生怒气值是发气球给他的时间减去a题时间。现在有一个机器人顺时针环绕桌子发球,每个单位时间走过一个位置。问机器人在哪个位置开始发气球总怒气值最小,输出最小怒气值。



其实是个傻逼思维题。假如他从位置m开始发气球,对于每个位置i,他到达的时间为k*m+i,所以对于每个它在时刻t a的题,他需要等待t-k*m+i中最小的正整数时间。随便算算就能知道每一题从m位置开始具体产生的怒气值,从而算出怒气总值作为初始值(当然从其他位置也行)。然后他往逆时针移动一个位置开始,相当于所有a题时间在%m的意义下+1。因此我们从小到大排个序,从最后一个数字往第一个数字遍历一遍,每次的操作都是把该为数字加到0的数加到所有题上,算算总的怒气值,在这里面一定产生一个最小的怒气值。

 1 #include<bits/stdc++.h>
 2 #define clr(x) memset(x,0,sizeof(x))
 3 #define clr_1(x) memset(x,-1,sizeof(x))
 4 #define mod 1000000007
 5 #define LL long long
 6 using namespace std;
 7 const int N=200010;
 8 int n,m,q,k,T,u,v;
 9 int pos[N],info[N];
10 LL pp,qq,tt,ans,all;
11 int main()
12 {
13     scanf("%d",&T);
14     while(T--)
15     {
16         scanf("%d%d%d",&n,&m,&q);
17         for(int i=1;i<=n;i++)
18         {
19             scanf("%d",&pos[i]);
20             if(pos[i]==m)
21                 pos[i]=0;
22         }
23         all=0;
24         for(int i=1;i<=q;i++)
25         {
26             scanf("%d%d",&u,&v);
27             v=v%m;
28             info[i]=(pos[u]-v+m)%m;
29             all+=info[i];
30         }
31         n=q;
32         sort(info+1,info+n+1);
33         LL qq=0;
34         ans=all;
35         for(int i=n;i>=1;i--)
36         {
37             pp=m-(info[i]+qq);
38             all-=(LL)info[i]+qq;
39             all+=pp*(n-1);
40             qq+=pp;
41             if(all<ans)
42                 ans=all;
43         }
44         printf("%lld\n",ans);
45     }
46     return 0;
47 }

时间: 2024-11-09 23:38:18

ccpc秦皇岛部分题解的相关文章

三个倒霉鬼的CCPC秦皇岛打铁记

出发: 2019年9月20日凌晨四点,我和Dicer还有凯凯踏上了前往秦皇岛的火车,一趟神奇的旅途就这样开始了... 第一次坐那么久的火车,虽然是硬卧,但是有些难受,由于空调吹冷风,结果,我感冒了.. 到了宾馆已经晚上十点半了,又饿又困,然后晚上点了40+的外卖,实不相瞒,没有学校的正新鸡排好吃多了.洗了个热水澡就睡觉了. 报道 宾馆和东大秦皇带分校离得很近,步行了20分钟就到了,报道完就在食堂摸鱼...午饭吃的也挺淡的,忘了说一句我袋子又又又忘了拿了(心累). 热身赛 我觉得热身赛就表明了这场

2019 CCPC秦皇岛 F Forest Program

关键在于怎样找到各个环及其边数. dfs搜 双连通分量 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef pair<int,int> piir; 4 typedef long long ll; 5 const int maxn = 3e5+5; 6 const int maxm = 5e5+5; 7 const int INF = 0x3f3f3f3f; 8 const int mod = 998244353; 9

hdu6153 A Secret CCPC网络赛 51nod 1277 KMP

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意: 给出两个字符串S1,S2,求S2的所有后缀在S1中出现的次数与其长度的乘积之和. 思路: CCPC网络赛题解: https://post.icpc-camp.org/d/714-ccpc-2017 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277   是一样的 将s1,s2翻转,转化为求前缀在s1中出

acm弱鸡的经历总结

本文地址:https://www.cnblogs.com/maplefighting/p/8007456.html 没啥成绩,大二三拿过省赛银,然后大三大四总共打了两场ccpc和两场icpc,都是一轮游.(虽然已经超过往届师兄的记录,但是还是贼菜,主要没系统的练习,氛围也不行,还tm分校区) 对于一个财经类弱校,虽然有acm社团,但是对我基本没什么用,主要得靠自觉以及坚持. 大一寒假看了紫书,大一暑假看了大白书,大二寒假看了挑战程序设计竞赛.在校却没怎么学习算法,没怎么敲题.而且书只是看了,没怎

【赛后总结+部分题解】2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛

赛后总结: T:今天状态一般,甚至有点疲惫.然后12点比赛开始,和队友开始看题,从最后往前面看,发现数学题公式看不懂.然后发现队友已经双开做1001和1006了,我看着1007有人A,开始做1007.看了一会发现这是一个简单签到题,构造一下就完事了.然后一遍A,结束.在他们看1008的时候,我回去看1002和1003,1002的题意没看清楚,队友说的也有点模糊,然后不知道怎么下手.开始看1003,因为A的人真的好多呜呜呜.从AC自动机一直re转为后缀自动机,然后不会.结束了.今天对队伍的贡献太少

2019秦皇岛CCPC旅游小结

2019秦皇岛CCPC旅游小结 秦皇岛的海风伴着夕阳,小城和家的概念突然在我心中糅合起来,一种特有的安逸感填充着我的身旁 前言 ? 万恶之源是暑假刚结束的时候不知道被谁怂恿去报了ccpc,结果没看时间就报了秦皇岛,然后莫名其妙居然还过了,于是乎就奇妙的成了学校秋季赛季的先锋,还让我们这种菜鸡占了学校四分之一的名额,表面该吃吃该喝喝,内心其实还是慌得一批2333 ? 定下出勤比赛后,队内的训练其实是不够积极的,这其中有暑假集训的疲软期和被课设搞得焦头烂额的后遗症的原因,当然这部分责任在我,三个人分

Codeforces Gym 102361A Angle Beats CCPC2019秦皇岛A题 题解

题目链接:https://codeforces.com/gym/102361/problem/A 题意:给定二维平面上的\(n\)个点,\(q\)次询问,每次加入一个点,询问平面上有几个包含该点的直角三角形. 分析:这是一篇鸽了很久的题解,主要原因就是现场赛的时候这题惨遭卡常,锅++.现在回过头来想这题,主要问题出在现场赛时误判了\(map\)的时间复杂度,把极角排序的正确想法成功叉掉,以及现场赛时候的共线计数使用了\(gcd\),使得整体复杂度上升.(但还是有大佬拿gcd思想过了,我太菜了)现

2017 CCPC杭州 题解

2017CCPC杭州题目PDF Problem A. Super-palindrome 题解: 给你一个字符串,每一步可以将一个字符替换为另一个字符,问你最少多少步可以使得,该字符串任意奇数子串为回文串,偶数子串为回文串. 满足上面条件一定是ababab这种形式,所以我们只要找到数量最多的两种字符用n-numa-numb得到ans1,有可能一种字符的数量过多,这时候我们只要把所有字符都变成这种字符就行了.得到n-numa,ans2; 在ans1和ans2中去最小值就是答案了: 参考代码: #in

[2018 CCPC 网络赛] 部分题解 (待补充)

真香爬山预警 1003 - Dream 题目链接 如题,p是一个质数,那么由费马小定理  a^p ≡ a (mod p)  ( a ∈ Z )  可得 只需将 加法定义为 (m + n) % p 乘法定义为 (m * n) % p 即可   1 #include <iostream> 2 #include <bits/stdc++.h> 3 using namespace std; 4 int main() 5 { 6 int t,p; 7 scanf("%d"