CF刷题-Codeforces Round #481-F. Mentors
题目链接:https://codeforces.com/contest/978/problem/F
题目大意:
n个程序员,k对仇家,每个程序员有一个能力值,当甲程序员的能力值绝对大于乙程序员的能力值时,甲可以做乙的爸爸,对于每个程序员,它可以做多少人的爸爸?(仇家之间不能做父子)
题解:
第一次:WA 失误
第二次:TL 找有效徒弟和仇家时,太复杂

第三次:ML 找有效徒弟依然复杂,找仇家简单了,但是内存超了

第四次:TL 解决了内存问题,找有效徒弟复杂,找仇家简单,时间超了(最接近成功的一次)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N = 2e5+;
struct programmer{
int b;
int r;
bool operator == (const int & i){
return (this->r == i);
}
}inip[N],p[N]; int ans[N];
int cmp(programmer&a,programmer&b){
return a.r < b.r;
}
struct ene{
int eff_enemy_num = ;
}d[N];
int main(void){
int n,k;
int tmp_r;
scanf("%d%d",&n,&k);
for(int i = ;i<=n;i++){
scanf("%d",&tmp_r);
p[i].b = i;
p[i].r = tmp_r;
inip[i].b = i;
inip[i].r = tmp_r;
}
sort(p+,p+n+,cmp);
int q1,q2;
for(int i=;i<k;i++){
scanf("%d%d",&q1,&q2);
if(inip[q1].r < inip[q2].r){
d[q2].eff_enemy_num++;
}
else if(inip[q1].r > inip[q2].r){
d[q1].eff_enemy_num++;
}
}
for(int i=;i<=n;i++){
int possibel_enemy_num;
int sum;
possibel_enemy_num = find(p+,p+i+,p[i].r) - p -;
sum = possibel_enemy_num - d[p[i].b].eff_enemy_num;
ans[p[i].b] = sum;
}
ans[p[].b] = ;
for(int i = ;i<=n;i++){
printf("%d",ans[i]);
if(i != n){
printf(" ");
}
}
return ;
}
第五次:TL 自认为优化,但是找有效徒弟还是太复杂
第六次:AC
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<iostream>
#include<vector>
#include<string>
#include<cmath>
#include<set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N = 2e5+;
struct programmer{
int b;
int r;
}inip[N],p[N]; map<int,int> z;
int ans[N];
int t[N];
int cmp(programmer&a,programmer&b){
return a.r < b.r;
}
struct ene{
int eff_enemy_num = ;
}d[N];
int main(void){
int n,k;
int tmp_r;
memset(t,,sizeof(t));
scanf("%d%d",&n,&k);
for(int i = ;i<=n;i++){
scanf("%d",&tmp_r);
p[i].b = i;
p[i].r = tmp_r;
inip[i].b = i;
inip[i].r = tmp_r;
}
sort(p+,p+n+,cmp);
int q1,q2;
for(int i=;i<k;i++){
scanf("%d%d",&q1,&q2);
if(inip[q1].r < inip[q2].r){
d[q2].eff_enemy_num++;
}
else if(inip[q1].r > inip[q2].r){
d[q1].eff_enemy_num++;
}
}
for(int i = ;i<=n;i++){
z[p[i].r] = ;
}
for(int i =;i<=n;i++){
t[p[i].b] = z[p[i].r];
z[p[i].r]++;
}
for(int i=;i<=n;i++){
int possibel_enemy_num;
int sum; possibel_enemy_num = i--t[p[i].b];
sum = possibel_enemy_num - d[p[i].b].eff_enemy_num;
ans[p[i].b] = sum;
}
ans[p[].b] = ;
for(int i = ;i<=n;i++){
printf("%d",ans[i]);
if(i != n){
printf(" ");
}
}
return ;
}
神犇代码(思路一致,但是简洁太多了):
#include <bits/stdc++.h> using namespace std;
const int maxn = 2e5 + ;
typedef long long ll; struct NODE {
int va,ans;
}node[maxn]; int n,k,num[maxn]; void init() {
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) {
scanf("%d",&node[i].va);
num[i] = node[i].va;
}
sort(num+,num++n); for(int i=;i<=n;i++) {
NODE k = node[i];
node[i].ans = lower_bound(num+,num++n,k.va) - num - ;
}
} int main() {
init();
while(k--) {
int a,b;
scanf("%d%d",&a,&b);
if(node[a].va < node[b].va) {
node[b].ans--;
} else if(node[b].va < node[a].va) {
node[a].ans--;
}
}
for(int i=;i<=n;i++)
printf("%d ",node[i].ans);
return ;
}
CF刷题-Codeforces Round #481-F. Mentors的更多相关文章
- CF刷题-Codeforces Round #481-G. Petya's Exams
题目链接:https://codeforces.com/contest/978/problem/G 题目大意:n天m门考试,每门考试给定三个条件,分别为:1.可以开始复习的日期.2.考试日期.3.必须 ...
- CF刷题-Codeforces Round #481-D. Almost Arithmetic Progression
题目链接:https://codeforces.com/contest/978/problem/D 题解: 题目的大意就是:这组序列能否组成等差数列?一旦构成等差数列,等差数列的公差必定确定,而且,对 ...
- [cf contest 893(edu round 33)] F - Subtree Minimum Query
[cf contest 893(edu round 33)] F - Subtree Minimum Query time limit per test 6 seconds memory limit ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- Codeforces Round #481 (Div. 3)
我实在是因为无聊至极来写Div3题解 感觉我主要的作用也就是翻译一下题目 第一次线上打CF的比赛,手速很重要. 这次由于所有题目都是1A,所以罚时还可以. 下面开始讲题 A.Remove Duplic ...
- 水题 Codeforces Round #105 (Div. 2) B. Escape
题目传送门 /* 水题:这题唯一要注意的是要用double,princess可能在一个小时之内被dragon赶上 */ #include <cstdio> #include <alg ...
- 水题 Codeforces Round #302 (Div. 2) A Set of Strings
题目传送门 /* 题意:一个字符串分割成k段,每段开头字母不相同 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 */ #include <cstdio> ...
- 水题 Codeforces Round #300 A Cutting Banner
题目传送门 /* 水题:一开始看错题意,以为是任意切割,DFS来做:结果只是在中间切出一段来 判断是否余下的是 "CODEFORCES" :) */ #include <cs ...
- 水题 Codeforces Round #299 (Div. 2) A. Tavas and Nafas
题目传送门 /* 很简单的水题,晚上累了,刷刷水题开心一下:) */ #include <bits/stdc++.h> using namespace std; ][] = {" ...
随机推荐
- November 25th 2016 Week 48th Friday
People will fall for its appearance while driving passionately. 观者倾心,驭者动魄. This is an advertisement ...
- css3画图那些事(三角形、圆形、梯形等)
闲来无事,写写图形.当时巩固一下css3吧..前端小白,写的不好还请前辈多指教. 三角形 { width:; height:; border-bottom: 140px solid red ; bor ...
- 【CF917D】Stranger Trees
题目 看题解的时候才突然发现\(zky\)讲过这道题啊,我现在怕不是一个老年人了 众所周知矩阵树求得是这个 \[\sum_{T}\prod_{e\in T}w_e\] 而我们现在的这个问题有些鬼畜了, ...
- 【转】使用URL SCHEME启动天猫客户端并跳转到某个商品页面的方法
在项目中遇到了这样一个需求:让用户在手机应用中,点击一个天猫的商品链接(知道商品在PC浏览器里的地址),直接启动天猫的客户端并显示这个商品.以前曾经实现过类似的功能,不过那次是淘宝的商品,天猫和淘宝的 ...
- virtualbox+vagrant学习-3-Vagrant Share-2-HTTP Sharing
HTTP Sharing Vagrant Share可以创建一个可公开访问的URL端点来访问在Vagrant环境中运行的HTTP服务器.这被称为“HTTP共享”,在使用Vagrant Share时默认 ...
- 访问 IIS 元数据库失败解决问题的方法
近日调试一Asp.net程序,出现了“访问 IIS 元数据库失败”的错误信息,最后经过搜索发现了解决问题的方法. 解决方法如下: 1.依次点击“开始”-“运行”. 2.在“运行”栏内输入 “C:\WI ...
- [NOI2001]炮兵阵地 【状压DP】
#\(\color{red}{\mathcal{Description}}\) \(Link\) 司令部的将军们打算在\(N \times M\)的网格地图上部署他们的炮兵部队.一个\(N \time ...
- P2280 [HNOI2003]激光炸弹
题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi . 输出格式: 输出文件名为out ...
- sed 替换有单引号的行
cat test.txt $config['useragent'] = 'Roundcube Webmail'; // Hide version number//$config['username_d ...
- 【敏捷实用工具】JIRA介绍以及使用方法
敏捷开发并不是由敏捷工具来推动的.但是没有敏捷工具的支持,就很难进行各种软件工程的相关事件,工具的作用是约束和流程,正确使用敏捷工具可以事半功倍,实践敏捷.近几年来敏捷开发催生大量敏捷工具的产生,在敏 ...