要点

  • 题意是:以颜色red举例,逆时针找最近的,顺时针找最近的,相减得到val;对三种颜色都做这事然后求和,卖掉最小的,更新,继续。
  • 360度很小所以就像365天一样可以暴力前后扫。每次更新最多6个所以就是模拟题了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
using namespace std; const int maxn = 1e5 + 5;
int n;
struct Card {
int c[3], id;
}a[maxn];
struct node {
int val, id;
bool operator < (const node &rhs) const {
if (val != rhs.val) return val < rhs.val;
return id > rhs.id;
}
};
set<int> s[3][360];
set<node> S;
map<int, int> mp;
int V[maxn]; int getval(int i) {
int sum = 0;
for (int j = 0; j < 3; j++) {
int cur = a[i].c[j];
if (s[j][cur].size() >= 2) continue;
int l = cur;
do {
l = (l - 1 + 360) % 360;
} while (s[j][l].size() == 0);
int r = cur;
do {
r = (r + 1) % 360;
} while (s[j][r].size() == 0);
if (l > cur) l -= 360;
if (r < cur) r += 360;
sum += r - l;
}
return sum;
} void deal(int j, int pos) {
if (s[j][pos].size() >= 2) return;
int id = *s[j][pos].begin();
int val = getval(mp[id]);
S.erase({V[mp[id]], id});
S.insert({V[mp[id]] = val, id});
} int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &a[i].c[j]);
}
scanf("%d", &a[i].id);
int id = a[i].id;
mp[id] = i;
for (int j = 0; j < 3; j++) {
s[j][a[i].c[j]].insert(id);
}
}
for (int i = 0; i < n; i++) {
V[i] = getval(i);
S.insert({V[i], a[i].id});
}
while (n--) {
int id = S.begin()->id;
printf("%d\n", id);
S.erase(S.begin());
int t = mp[id];
for (int j = 0; j < 3; j++) {
int k = a[t].c[j];
if (s[j][k].size() >= 2) {
s[j][k].erase(s[j][k].find(id));
int iid = *s[j][k].begin(), vval = getval(mp[iid]);
S.erase({V[mp[iid]], iid});
S.insert({V[mp[iid]] = vval, iid});
} else if (n >= 1) {
s[j][k].erase(s[j][k].begin());
int l = k;
do {
l = (l - 1 + 360) % 360;
} while (s[j][l].size() == 0);
deal(j, l);
int r = k;
do {
r = (r + 1) % 360;
} while (s[j][r].size() == 0);
deal(j, r);
}
}
}
}

GYM 101572C(模拟)的更多相关文章

  1. C - Boss Gym - 101473C (模拟)

    题目链接:https://cn.vjudge.net/contest/287775#problem/C 题目大意:给你n个人,然后m条关系,会有k次询问,每一次询问包括两种类型,第一种类型是交换两个人 ...

  2. Galactic Collegiate Programming Contest Gym - 101572G 模拟

    #include<bits/stdc++.h> using namespace std; int n,m; struct node { int id; int slove; int pen ...

  3. 【模拟】ECNA 2015 I What's on the Grille? (Codeforces GYM 100825)

    题目链接: http://codeforces.com/gym/100825 题目大意: 栅栏密码.给定N(N<=10),密钥为一个N*N的矩阵,'.'代表空格可以看到,'X'代表被遮挡,还有密 ...

  4. 【模拟】NEERC15 G Generators(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: n个序列.每个序列有4个值x,a,b,c,之后按照x=(a*x+b)%c扩展无穷项. 求每个序列各取一个数之后 ...

  5. 【模拟】NEERC15 J Jump(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 系统里生成一个字符串C,一开始告诉你字符串的长度N(偶数).接着你需要在n+500次内猜出这个字符串是什么. ...

  6. 【模拟】NEERC15 E Easy Problemset (2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: N个人,每个人有pi个物品,每个物品价值为0~49.每次从1~n顺序选当前这个人的物品,如果这个物品的价值&g ...

  7. 【模拟】NEERC15 A Adjustment Office (2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一个N*N的矩阵A,Ai,j=i+j,Q次操作,每次分两种,R r取出第r行还未被取的所有数,并输出和.C c ...

  8. 【模拟】BAPC2014 G Growling Gears (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  9. Gym 100952C&&2015 HIAST Collegiate Programming Contest C. Palindrome Again !!【字符串,模拟】

    C. Palindrome Again !! time limit per test:1 second memory limit per test:64 megabytes input:standar ...

随机推荐

  1. less的安装使用和入门实践

    1.简介 LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量.继承.运算.函数等,更方便CSS的编写和维护. LESSCSS可 ...

  2. Java_图片处理_02_图片处理工具类库

    二.参考文档 1.Java图片处理工具类库

  3. Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关

    什么是Jexus Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET.ASP.NET CORE.PHP为特色,同时具备反向代理.入侵检测等重要功能.可以这样说,J ...

  4. BZOJ - 4518: 征途(斜率优化,求N数划分为M区间的最小方差)

    注意初始化...等等补 #include<bits/stdc++.h> #define ll long long using namespace std; ; int q[maxn],he ...

  5. nginx 轮询模式 nginx_upstream_jvm_route 插件安装

    使用nginx_upstream_jvm_route插件的目的是为了保证在轮询机制下的session的共享 前提:源码方式安装nginx.patch命令 1.下载nginx_upstream_jvm_ ...

  6. Data Guard 异构平台支持手册

    背景 最简单的DG 环境是同数据库版本,同操作系统平台. 但有时需要在异构平台上来部署DG 环境,比如异构下使用DG 来进行数据迁移,从而降低停机时间和风险等等. 1. 查看主备库的Platform ...

  7. 树——平衡二叉树插入和查找的JAVA实现(2):增加删除方法

    package com.tomsnail.data.tree; /** * AVL二叉平衡树 * @author tomsnail * @date 2015年3月30日 下午4:35:50 */ pu ...

  8. rt-thread的定时器管理源码分析

    1 前言 rt-thread可以采用软件定时器或硬件定时器来实现定时器管理的,所谓软件定时器是指由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务.而硬件 ...

  9. ubuntu下 修改主机名

    sudo gedit /etc/hostname 写入: sudo gedit /etc/hosts

  10. 模拟select选择器

    <form method="post"> <div class="selectly" id="s1"> Select ...