先总结一下。


A竟然想了555分钟,同机房的人都切掉了之后才开始做。

B因为RE错了222次,罚了许多分;主要是看到WAWAWA,以为思路错了,事实上是数组开笑了

C想了半天,无果。开DDD,切掉。

然后回到CCC,一个同机房的巨佬做出来之后,全机房的人问他怎么做;结果啥也没听懂,比赛结束后才恍然大悟。

用了自己的一个636636636分的,才打一场的灰名小号打,应该能上分吧……

Solution

A

对于每一对(i,j)(i,j)(i,j),配上(j,−i)(j,-i)(j,−i)即可。

B

开桶记录,乱搞即可。

C

首先,我加强一下数据: 可能有mmm个琴弦,m≤100000m≤100000m≤100000。

我们考虑贪心。首先,为了将可选的方案数量大幅减少,我们将这两个数组分别减去它们各自的最小值。可以发现,对于bbb中的一个数kkk,要么选择aaa中kkk的前驱,要么选择后驱。这可以用决策包容性来证明。

于是,我们在对aaa排序后,对于bbb中的每一个数通过二分找到aaa中它的前驱与后驱。记cic_ici​表示bi−ajb_i-a_jbi​−aj​,did_idi​表示bi−akb_i-a_kbi​−ak​,其中aja_jaj​为aaa中bib_ibi​的前驱,aka_kak​为aaa中bjb_jbj​的后驱。

我们将ccc从小到大排序,同时使ccc中的值与ddd中的值相对应。可以发现,对于每一个位置的配对,决策在cccddd中;并且在最优解中,一定是前面一段先选择了ccc,后选择了ddd。

我们枚举这个位置,使得在这个位置及其之前选择了ccc,后面选择了ddd,即这个位置为差的最大值。至于差的最小值,为后面选择的ddd中的最小值,可以通过预处理后缀最小值来O(1)O(1)O(1)查询。我们求出每一对的差的最大值减去最小值,然后取minminmin即可。

总时间复杂度O(n(logn+logm)+mlogm)O(n(logn+logm)+mlogm)O(n(logn+logm)+mlogm)。

花絮: 一位机房巨佬Guess00赛时把这题切了,我们一起膜拜他吧! orz

D

一道水的构造题。

我们从后往前扫一遍,维护一个堆,记录下当前扫到的物品的从小到大排序的结果;每次取出堆顶作为当前这一次放进去的物品价值,并继续向前扫。

最后,我们再用相同的方式,使用一个堆,从前往后扫一遍,用来判断我们这种构造方案是否可行。如果可行直接输出方案,否则输出−1-1−1。

时间复杂度O(nlogn)O(nlogn)O(nlogn)。注意数组开大

Code

A

#include <bits/stdc++.h>
#define int long long
using namespace std;int t,n;
int a[200005];signed main()
{cin>>t;while (t--){cin>>n;for (int i=1;i<=n;i++)  cin>>a[i];for (int i=1;i<=n;i++){if (i%2==1)  cout<<a[i+1]<<' ';else cout<<-a[i-1]<<' ';}cout<<endl;}return 0;
}

B

#include <bits/stdc++.h>
#define int long long
using namespace std;int t,n,m,x;
int a[1005][1005],v[1000005],num[1000005],ans[1005][1005];signed main()
{cin>>t;while (t--){cin>>n>>m;for (int i=1;i<=n*m;i++)  v[i]=num[i]=0;for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)  ans[i][j]=0;}for (int i=1;i<=n;i++){cin>>a[i][1];v[a[i][1]]=i;for (int j=2;j<=m;j++)  cin>>a[i][j];}for (int i=1;i<=m;i++){for (int j=1;j<=n;j++){cin>>x;num[v[x]]=j;}}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)  ans[num[i]][j]=a[i][j];}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)  cout<<ans[i][j]<<' ';cout<<endl;}}return 0;
}

C

//by gh
#include<bits/stdc++.h>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#define DEBUG cerr << "Passing Line " << __LINE__<< " in Function [" << __FUNCTION__ << "].\n";
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;const int INF = 0x3f3f3f3f;
const ll llINF = 1e18;
const int MAXN = 1e5 + 5;
const int MAXM = 10;
const int m = 6;int n;
int a[MAXN],b[MAXN],suf[MAXN];
pii c[MAXN];int main(){// freopen("data.in","r",stdin);// freopen("data.out","w",stdout);for(int i = 1;i <= m;i++)scanf("%d",&a[i]);scanf("%d",&n);for(int i = 1;i <= n;i++)scanf("%d",&b[i]);sort(a + 1,a + 1 + m);sort(b + 1,b + 1 + n);for(int i = 2;i <= m;i++)a[i] -= a[1];a[1] = 0;for(int i = 2;i <= n;i++)b[i] -= b[1];b[1] = 0;for(int i = 1;i <= n;i++){int x = upper_bound(a + 1,a + 1 + m,b[i]) - a - 1;c[i].first = b[i] - a[x];x = lower_bound(a + 1,a + 1 + m,b[i]) - a;if(x == m + 1)c[i].second = -INF;elsec[i].second = b[i] - a[x];}sort(c + 1,c + 1 + n);int ans = INF;suf[n] = c[n].second;for(int i = n - 1;i >= 1;i--)suf[i] = min(suf[i + 1],c[i].second);for(int i = 1;i <= n;i++)ans = min(ans,c[i].first - suf[i + 1]);printf("%d\n",ans);return 0;
}

D

#include <bits/stdc++.h>
#define int long long
using namespace std;int n,pos=0,a[200005];struct node
{char x;int num;
}tmp[200005];signed main()
{cin>>n;for (int i=1;i<=2*n;i++){cin>>tmp[i].x;if (tmp[i].x=='-')  cin>>tmp[i].num;}priority_queue<int,vector<int>,greater<int> > q;for (int i=2*n;i>=1;i--){if (tmp[i].x=='-'){int now=tmp[i].num;q.push(now);}else{int x=q.top();a[i]=x;q.pop();}}for (int i=1;i<=2*n;i++){if (tmp[i].x=='+'){int now=tmp[i].num;q.push(now);}else{int x=q.top();if (tmp[i].num!=x)  return cout<<"NO"<<endl,0;q.pop();}}cout<<"YES"<<endl;for (int i=1;i<=2*n;i++){if (a[i])  cout<<a[i]<<' ';}cout<<endl;return 0;
}

Technocup 2020-Elimination Round 1(CF1413)部分题解总结相关推荐

  1. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告

    A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...

  2. Technocup 2020 - Elimination Round 2 E. Rock Is Push dp

    传送门 文章目录 题意: 思路 题意: 给你一个n×mn×mn×m的方格,你初始在(1,1)(1,1)(1,1)点,有些位置有箱子,你可以走到某个位置向你的方向推动这个箱子,箱子不能出界,问你走到(n ...

  3. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造

    传送门 文章目录 题意: 思路: 题意: 给nnn个数,让你构造一个尽可能大的矩阵,其中每个点所在的行和列都不含相等元素. 思路: 假设构造的答案矩阵大小为a×ba×ba×b且a<=ba< ...

  4. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维

    传送门 文章目录 题意: 思路: 题意: 给一张图,求必须经过aaa点和bbb点的路径条数. 思路: 通过观察我们发现,这个路径无非就是x−>a−>b−>yx->a->b ...

  5. CF Technocup 2020 - Elimination Round 3

    A A math problem 题目描述 Your math teacher gave you the following problem: There are n segments on the ...

  6. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)

    一场挺简单的CF,但是我打炸了啊 A. Search for Pretty Integers time limit per test 1 second memory limit per test 25 ...

  7. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  8. Codeforces Round #759 (Div. 2, based on Technocup 2022 Elimination Round 3)

    感觉E思路明确只用了stl+树状数组,F线段树复合修改,为什么都是2400. A. Life of a Flower B. Array Eversion C. Minimize Distance E. ...

  9. Codeforces Technocup 2017 - Elimination Round 2 E Subordinates(贪心)

    题目链接 http://codeforces.com/contest/729/problem/E 题意:给你n个人,主管id为s,然后给你n个id,每个id上对应一个数字表示比这个人大的有几个. 最后 ...

最新文章

  1. LeetCode之Sort List
  2. java Socket Tcp 浏览器和服务器(一)
  3. 大型网站架构模式之二
  4. linux 下一个 osw先从操作系统和标准脚本主动发起
  5. ASP.NET 中 Cookie 的基本知识
  6. nssl1522-简单数数题【dp】
  7. r a/b 测试_R中的A / B测试
  8. 软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...
  9. java创建线程哪种方法最好_Java创建线程的三种方法比较
  10. androidstudio 评论栏_android-studio 添加没有菜单栏和actionBar的模板
  11. 在linux中查找重复的文件夹,如何在Linux上找出并删除重复的文件:FSlint
  12. PMP考试参加培训一定能过吗?
  13. python第三方库怎么下载安装_简谈下载安装Python第三方库的三种方法
  14. redis 命令大全
  15. 手把手教学endnote设置毕业论文参考文献格式(特别完整)
  16. Android:H5 通过 URL Scheme 拉起app应用
  17. 春考计算机专业PS考点,春考辅导:春考PS的学习方法和技巧
  18. Jmeter(十八):硬件性能监控指标
  19. 嵌入式系统下的Microwindows实现
  20. 大数据专业怎么样?是什么?

热门文章

  1. win10 uwp 商业游戏 1.1.5
  2. 我的15年操作系统开源路——RT-Thread创始人熊谱翔
  3. java中的string类和ArrayList常用方法
  4. 写一个函数实现对数字数组的排序
  5. YDOOK: Java short 数据类型
  6. win11打不开应用程序(没有任何反应)
  7. 码农:曾diss我技术的人如今没工作找我,太具讽刺意义了!
  8. 协议:TCP缓冲区滑窗拥塞控制慢启动 (建议收藏!)
  9. 宏病毒组研究大放异彩!| 凌恩生物1-5月高分宏病毒组文章大盘点!
  10. 经典按键java手机游戏_能玩游戏的手机壳你见过吗?26款经典游戏玩到停不下来...