Intervals
来源:互联网 发布:node.js 教程 编辑:程序博客网 时间:2024/06/06 14:13
Description
You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn.
Write a program that:
reads the number of intervals, their end points and integers c1, ..., cn from the standard input,
computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n,
writes the answer to the standard output.
Write a program that:
reads the number of intervals, their end points and integers c1, ..., cn from the standard input,
computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n,
writes the answer to the standard output.
Input
The first line of the input contains an integer n (1 <= n <= 50000) -- the number of intervals. The following n lines describe the intervals. The (i+1)-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <= ai <= bi <= 50000 and 1 <= ci <= bi - ai+1.
Output
The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i=1,2,...,n.
Sample Input
53 7 38 10 36 8 11 3 110 11 1
Sample Output
6
这个题开始用的简单队列,结果超时了,然后就用了数组来存。而且开始拉掉了一个条件s[i+1]-s[i]<=1
这个题有:0<=s[i+1]-s[i]<=1(s[i]-s[i+1]>=-1) s[b]-s[a]>=w
因为是求最小值所以用>=
#include <iostream>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#define oo 1<<28#include<queue>struct node{ int u; int v; int w; int next;} edge[1100000];int n,m,s,t;using namespace std;int cnt;int dis[51000];int head[51000];int vist[51000];int pre[51000];int num[51000];void add(int u,int v,int w){ edge[cnt].u=u; edge[cnt].v=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++;}void init(){ for(int i=0; i<=n+1; i++) { dis[i]=-oo; } memset(pre,-1,sizeof(pre)); memset(vist,0,sizeof(vist)); memset(num,0,sizeof(num));}void Spfa(){ int i,cou=0; init(); int q[35000];//用单纯的队列会超时 dis[s]=0; vist[s]=1; q[cou++]=s; while(cou) { cou--; int t=q[cou]; i=head[t]; vist[t]=0; while(i!=-1) { int v=edge[i].v; int u=edge[i].u; int w=edge[i].w; if(dis[v]<w+dis[t]) { dis[v]=w+dis[t]; if(!vist[v]) { vist[v]=1; q[cou++]=v; } } i=edge[i].next; } } printf("%d\n",dis[t]-dis[s]);}int main(){ int i,j; char str[1000]; while(~scanf("%d",&n)) { int u,v,w; int maxx=0,minn=oo; cnt=0; memset(head,-1,sizeof(head)); for(i=1; i<=n; i++) { scanf("%d%d%d",&u,&v,&w); add(u,v+1,w);//s[v+1]-[u]>=w求最小值用>= minn=min(u,minn); maxx=max(v+1,maxx); } s=minn,t=maxx; for(i=minn;i<maxx;i++) { add(i,i+1,0);//s[i+1]-s[i]>=0 add(i+1,i,-1);//开始拉掉了这个条件然后看的题解发现s[i+1]-s[i]<=1--->s[i]-s[i+1]>=-1 } Spfa(); } return 0;}
0 0
- Intervals
- Intervals
- Intervals
- Intervals
- Intervals
- 1089 Intervals
- the intervals
- PKU1201 Intervals
- PKU1201 intervals
- poj1201 Intervals
- poj3680 Intervals
- poj1201 - Intervals
- Merge Intervals
- Merge Intervals
- poj_1716Integer Intervals
- Merge Intervals
- Insert Intervals
- Merge Intervals
- HDU 4986 Little Pony and Alohomora Part I(递推+犹拉常数)
- 修改oracle 10g字符集
- APK 反编译
- 使用binlog找回truncate数据
- 五:作业
- Intervals
- HDOJ题目3829Cat VS Dog(二分图,最大独立集)
- C++预处理功能:头文件保护符
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 多线程编程3.1-----synchronized关键字保证多线程互斥
- html加载xmlDoc
- 一个cheat命令 == Linux命令小抄大全
- 将excel的数据添加到数据库
- 统计C语言代码中常见关键字出现的次数