【CF】222 Div.1 B Preparing for the Contest
这样类似的题目不少,很多都是一堆优化条件求最优解,这个题的策略就是二分+贪心。
对时间二分, 对费用采用贪心。
/* 377B */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef struct node_t {
int x, id;
node_t() {}
node_t(int x_, int id_):
x(x_), id(id_) {}
friend bool operator< (const node_t& a, const node_t& b) {
return a.x > b.x;
}
} node_t; typedef struct student {
int x, p, id;
student() {}
student(int x_, int p_, int id_):
x(x_), p(p_), id(id_) {}
friend bool operator< (const student& a, const student& b) {
return a.x > b.x;
}
} student; const int maxn = 1e5+;
int a[maxn];
int n, m, s;
node_t N[maxn];
student S[maxn]; bool comp(const student& a , const student& b) {
return a.x > b.x;
} bool judge(int t) {
priority_queue<int,vi, greater<int> > Q;
int i, j, k;
int p;
int tot = s; i = ; // i for student
j = ; // j for Q
while (j < m) {
while (i<n && S[i].x>=N[j].x) {
Q.push(S[i].p);
++i;
}
if (Q.empty())
break;
p = Q.top();
Q.pop();
if (p > tot)
return false;
tot -= p;
j += t;
} return j>=m;
} void bfs(int t) {
priority_queue<pii,vpii, greater<pii> > Q;
int i, j, k, id;
int m_; i = ; // i for student
j = ; // j for Q
while (j < m) {
while (i<n && S[i].x>=N[j].x) {
Q.push(mp(S[i].p, S[i].id));
++i;
}
id = Q.top().sec;
Q.pop();
m_ = min(m, j+t);
for (k=j; k<m_; ++k)
a[N[k].id] = id;
j += t;
}
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int ans = -; scanf("%d %d %d", &n, &m, &s);
rep(i, , m) {
scanf("%d", &N[i].x);
N[i].id = i;
}
rep(i, , n) {
scanf("%d", &S[i].x);
S[i].id = i+;
}
rep(i, , n)
scanf("%d", &S[i].p); sort(N, N+m);
sort(S, S+n); if (S[].x < N[].x) {
puts("NO");
return ;
} int l = ;
int r = m+;
int mid; while (l <= r) {
mid = (l+r)>>;
if (judge(mid)) {
ans = mid;
r = mid - ;
} else {
l = mid + ;
}
} if (ans > ) {
puts("YES");
bfs(ans);
rep(i, , m)
printf("%d ", a[i]);
putchar('\n');
} else {
puts("NO");
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}
【CF】222 Div.1 B Preparing for the Contest的更多相关文章
- Codeforces Round #222 (Div. 1) B. Preparing for the Contest 二分+线段树
B. Preparing for the Contest 题目连接: http://codeforces.com/contest/377/problem/B Description Soon ther ...
- 【CF】121 Div.1 C. Fools and Roads
题意是给定一棵树.同时,给定如下k个查询: 给出任意两点u,v,对u到v的路径所经过的边进行加计数. k个查询后,分别输出各边的计数之和. 思路利用LCA,对cnt[u]++, cnt[v]++,并对 ...
- 【CF】310 Div.1 C. Case of Chocolate
线段树的简单题目,做一个离散化,O(lgn)可以找到id.RE了一晚上,额,后来找到了原因. /* 555C */ #include <iostream> #include <str ...
- 【CF】110 Div.1 B. Suspects
这题目乍眼一看还以为是2-sat.其实很水的,O(n)就解了.枚举每个人,假设其作为凶手.观察是否满足条件.然后再对满足的数目分类讨论,进行求解. /* 156B */ #include <io ...
- 【CF】207 Div.1 B.Xenia and Hamming
这题目一看很牛逼,其实非常easy.求求最小公倍数,最大公约数,均摊复杂度其实就是O(n). /* 356B */ #include <iostream> #include <str ...
- 【CF】142 Div.1 B. Planes
SPFA.注意状态转移条件,ans的求解需要在bfs中间求解.因为只要到了地点n,则无需等待其他tourist.还是蛮简单的,注意细节. /* 229B */ #include <iostrea ...
- 【CF】196 Div.2 D. Book of Evil
显然这个图是一课树,看着题目首先联想到LCA(肯定是可以解的).但是看了一下数据大小,应该会TLE.然后,忽然想到一个前面做过的题目,大概是在一定条件下树中某结点旋转成为根后查询最长路径.结果灵感就来 ...
- 【CF】223 Div.1 C Sereja and Brackets
水线段树. /* 380C */ #include <iostream> #include <string> #include <map> #include < ...
- 【CF】259 Div.1 B Little Pony and Harmony Chest
还蛮有趣的一道状态DP的题目. /* 435B */ #include <iostream> #include <string> #include <map> #i ...
随机推荐
- Repeater事件OnItemCommand取得行内控件
记录一下,主要是这句:TextBox txtNum = e.Item.FindControl("txtNum") as TextBox; Repeater真是太强了,太灵活.除了R ...
- 结合Retrofit,RxJava,Okhttp,FastJson的网络框架RRO
Retrofit以其灵活的调用形式, 强大的扩展性著称. 随着RxAndroid的推出, Retrofit这样的可插拔式的网络框架因其可以灵活兼容各种数据解析器, 回调形式(主要还是RxJava啦)而 ...
- 学习笔记_JDBC_1_Demo1_连接数据库的基本操作和步骤
常见错误:连数据库时,这句话String url = "jdbc:mysql://localhost/数据库名";数据库名可能和你建的数据库名不一样 1.安装Mysql,记住此时你 ...
- oracle 定义临时表
创建Oracle 临时表,可以有两种类型的临时表: 会话级的临时表 事务级的临时表 . 1) 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系, 当你当前SESSION不退出的情况下,临时表 ...
- 注册一个比较大小Handlebars
1.显示的数据 var datas = { id:"number" } 2.temp模板 <script id="template" type=" ...
- Installshield: custom action return value
参考:MSDN: Custom Action Return Values 参考:MSDN: Logging of Action Return Values
- STL中map与hash_map的比较
1. map : C++的STL中map是使用树来做查找算法; 时间复杂度:O(log2N) 2. hash_map : 使用hash表来排列配对,hash表是使用关键字来计算表位置; 时间复杂度:O ...
- (转)UIColor 的使用
os开发-UIColor的使用. 在ios开发中,经常遇到对UIColor的相关操作. 比如这样 self.backgroundColor = [UIColorredColor]; 这里的redCol ...
- IOS 学习笔记 2015-03-18
Objective--C 一 关键字 1 KVC 动态设值,动态取值,类似雨java中的反射,而且私有的照样可以设置与获取 2 二 函数 1 retain 给对象引用计数器 + 1 2 release ...
- JS分段上传文件(File)并使用MD5.js加密文件段用来后台校验
HTML <form method="POST" name="form1" action="/mupload/upload/" enc ...