hihoCoder太阁最新面经算法竞赛2
2016-05-31 21:18
253 查看
[b]A 任务分配[/b]
同一时间一台机器上最多进行一项任务,并且一项任务必须从头到尾保持在一台机器上进行。任务切换不需要时间。
题解:线段树(区间更新,离散化)
代码:
View Code
描述
给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, EN ), 计算最少需要多少台机器才能按时完成所有任务。同一时间一台机器上最多进行一项任务,并且一项任务必须从头到尾保持在一台机器上进行。任务切换不需要时间。
输入
第一行一个整数 N,(1 ≤ N ≤ 100000),表示任务的数目。 以下 N 行每行两个整数 Si, Ei,(0 ≤ Si < Ei ≤ 1000000000),表示任务的起至时间。输出
输出一个整数,表示最少的机器数目。题解:线段树(区间更新,离散化)
代码:
/*二进制小数*/ #include<cstdio> #include<map> #include<cstring> using namespace std; int ans[100000]; int s[150]; int rear; int flag=1; int muti() { for(int i=2;i<=rear;i++) s[i]*=2; for(int i=rear;i>=2;i--) { if(s[i]>=10) { s[i-1]++; s[i]%=10; } } for(rear=140;rear>=1;rear--) { if(s[rear]==0) continue; else break; } if(rear!=1&&s[rear]!=5) flag=0; } int main() { int T; scanf("%d",&T); while(T--) { char S[150]; memset(S,0,sizeof(S)); scanf("%s",S); memset(s,0,sizeof(s)); int len=strlen(S); for(int i=2;i<len;i++) s[i]=S[i]-'0'; memset(ans,0,sizeof(ans)); len=1; flag=1; rear=strlen(S)-1; while(1) { muti(); if(flag==0) break; ans[len++]=s[1]; s[1]=0; if(rear==1) break; } if(flag==0) printf("NO\n"); else { printf("0."); for(int i=1;i<len;i++) printf("%d",ans[i]); printf("\n"); } memset(S,0,sizeof(S)); } return 0; }
View Code
相关文章推荐
- Hadoop数据传输工具:Sqoop
- AndroidStudio关联android Source方法
- Linux进程间通信——使用共享内存
- PL/SQL中的自定义函数
- 第4代乐视超级电视全系亮相,生态电视“王炸”来了
- Chrome+浏览器下载链接
- 浏览器的模式
- Pythonn new-style class and old-style class
- kafka+zookeeper环境配置
- 贪心法——部分背包问题
- PHP三种运行方式mod_php5/cgi/fast-cgi
- TCP定时器介绍
- 简谈俩种不同方式对vector容器的 自定义结构体进行排序
- Mac系统开发常见问题-80端口被占用的解决方案2-使用Nginx解决
- K-近邻算法
- 多线程信号量的使用
- pitch yaw roll是什么
- 联合训练图论场
- Linux 系列(六)——Nginx实现多虚拟主机配置
- ViewPager和Fragment使用时候的适配器