大学生程序设计邀请赛(华东师范大学)-F-贪心
2017-05-14 10:38
281 查看
链接:点击打开链接
直接贪心按r从小到大排,然后再用树状数组维护区间现有路灯数,接着直接暴力就可以了。
代码:
#include<bits/stdc++.h>
const int mx=1e3+10;
typedef long long ll;
using namespace std;
int x,n,m,k,sum[mx];
bool vis[mx];
struct sec{
int l,r,t;
bool operator < (sec A)const{
if(r==A.r) return l<A.l;
return r<A.r;
}
}s[mx];
inline int lowbit(int x){
return x&(-x);
}
void addup(int p){
for(int i=p;i<=n;i+=lowbit(i)){
sum[i]++;
}
}
int query(int x){
int ans=vis[x--];
while(x>0){
ans+=sum[x];
x-=lowbit(x);
}
return ans;
}
int main(){
int t,pos,cases=1;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<=n;i++) sum[i]=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<k;i++){
scanf("%d",&pos);
vis[pos]=1,addup(pos);
}
for(int i=0;i<m;i++) scanf("%d%d%d",&s[i].l,&s[i].r,&s[i].t);
sort(s,s+m);
int flag=0,ans=0;
for(int i=0;i<m;i++){
int r=s[i].r,l=s[i].l,t1=s[i].t;
if(t1>r-l+1){ flag=1; break; }
int now=query(r)-query(l-1);
now=t1-now;
while(now>0){
if(!vis[r]){
vis[r]=1,addup(r);
now--,ans++;
}
r--;
}
}
printf("Case %d: ",cases++);
printf("%d\n",flag ? -1:ans);
}
return 0;
}
直接贪心按r从小到大排,然后再用树状数组维护区间现有路灯数,接着直接暴力就可以了。
代码:
#include<bits/stdc++.h>
const int mx=1e3+10;
typedef long long ll;
using namespace std;
int x,n,m,k,sum[mx];
bool vis[mx];
struct sec{
int l,r,t;
bool operator < (sec A)const{
if(r==A.r) return l<A.l;
return r<A.r;
}
}s[mx];
inline int lowbit(int x){
return x&(-x);
}
void addup(int p){
for(int i=p;i<=n;i+=lowbit(i)){
sum[i]++;
}
}
int query(int x){
int ans=vis[x--];
while(x>0){
ans+=sum[x];
x-=lowbit(x);
}
return ans;
}
int main(){
int t,pos,cases=1;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<=n;i++) sum[i]=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<k;i++){
scanf("%d",&pos);
vis[pos]=1,addup(pos);
}
for(int i=0;i<m;i++) scanf("%d%d%d",&s[i].l,&s[i].r,&s[i].t);
sort(s,s+m);
int flag=0,ans=0;
for(int i=0;i<m;i++){
int r=s[i].r,l=s[i].l,t1=s[i].t;
if(t1>r-l+1){ flag=1; break; }
int now=query(r)-query(l-1);
now=t1-now;
while(now>0){
if(!vis[r]){
vis[r]=1,addup(r);
now--,ans++;
}
r--;
}
}
printf("Case %d: ",cases++);
printf("%d\n",flag ? -1:ans);
}
return 0;
}
相关文章推荐
- EOJ - 大学生程序设计邀请赛(华东师范大学) F. 丽娃河的狼人传说(贪心)
- EOJ-大学生程序设计邀请赛(华东师范大学)-E-黑心啤酒厂
- 大学生程序设计邀请赛(华东师范大学)-D题(线段树+随机化)
- EOJ-大学生程序设计邀请赛(华东师范大学)-B-分词
- EOJ-大学生程序设计邀请赛(华东师范大学)-A-拼音魔法
- EOJ-大学生程序设计邀请赛(华东师范大学)-F-丽娃河的狼人传说
- 2017大学生程序设计邀请赛(华东师范大学)G. 铁路修复计划
- A. 拼音魔法 大学生程序设计邀请赛(华东师范大学)
- EOJ-大学生程序设计邀请赛(华东师范大学)-I-七巧板
- EOJ-大学生程序设计邀请赛(华东师范大学)-F-丽娃河的狼人传说
- 大学生程序设计邀请赛(华东师范大学)题解
- EOJ-大学生程序设计邀请赛(华东师范大学)-H-法国传统舞蹈
- 大学生程序设计邀请赛(华东师范大学网赛)
- 大学生程序设计邀请赛(华东师范大学) 黑心啤酒厂
- 大学生程序设计邀请赛(华东师范大学)-D-线段树
- 大学生程序设计邀请赛(华东师范大学)C:袋鼠妈妈找孩子
- 大学生程序设计邀请赛(华东师范大学)
- 大学生程序设计邀请赛(华东师范大学)
- EOJ-大学生程序设计邀请赛(华东师范大学)-G-铁路修复计划
- EOJ 3263 大学生程序设计邀请赛(华东师范大学)- F 丽娃河的狼人传说 贪心