ZOJ1029 Moving Tables
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int TIMEPERMOVE = 10;//每次分钟
const int MAXSIZE = 200;
struct Move
{
int srcRoom;//源
int desRoom;//目标
}moves[MAXSIZE];
bool lessThan(const Move& m1,const Move& m2)
{
return m1.srcRoom<m2.srcRoom; //按照srcRoom从小到大排序
}
int main(void)
{
int Cases,i,j,k,n,s,t;
cin>>Cases;
for (i=1;i<=Cases;++i)
{
vector<Move> moveVect;
cin>>n;
for (j=0;j<n;++j)
{
cin>>s;
cin>>t;
if (s > t)
swap(s,t);
moves[j].srcRoom = (s+1)/2;
moves[j].desRoom = (t+1)/2;
moveVect.push_back(moves[j]);
}
//排序
sort(moveVect.begin(),moveVect.end(),lessThan);
int max = 0;
for (j=0; j<n; ++j)
{
int count = 1, from = moveVect[j].srcRoom, to = moveVect[j].desRoom;
for (k=0; k<n; ++k)
{
if (j == k) continue;
if (moveVect[k].srcRoom<=to && moveVect[k].desRoom>=from)
{
if (from < moveVect[k].srcRoom)
from = moveVect[k].srcRoom;
if (to > moveVect[k].desRoom)
to = moveVect[k].desRoom;
count++;
}
}
if (count > max)
max = count;
}
cout<<TIMEPERMOVE*max<<endl;
}
return 0;
}
#include <vector>
#include <algorithm>
using namespace std;
const int TIMEPERMOVE = 10;//每次分钟
const int MAXSIZE = 200;
struct Move
{
int srcRoom;//源
int desRoom;//目标
}moves[MAXSIZE];
bool lessThan(const Move& m1,const Move& m2)
{
return m1.srcRoom<m2.srcRoom; //按照srcRoom从小到大排序
}
int main(void)
{
int Cases,i,j,k,n,s,t;
cin>>Cases;
for (i=1;i<=Cases;++i)
{
vector<Move> moveVect;
cin>>n;
for (j=0;j<n;++j)
{
cin>>s;
cin>>t;
if (s > t)
swap(s,t);
moves[j].srcRoom = (s+1)/2;
moves[j].desRoom = (t+1)/2;
moveVect.push_back(moves[j]);
}
//排序
sort(moveVect.begin(),moveVect.end(),lessThan);
int max = 0;
for (j=0; j<n; ++j)
{
int count = 1, from = moveVect[j].srcRoom, to = moveVect[j].desRoom;
for (k=0; k<n; ++k)
{
if (j == k) continue;
if (moveVect[k].srcRoom<=to && moveVect[k].desRoom>=from)
{
if (from < moveVect[k].srcRoom)
from = moveVect[k].srcRoom;
if (to > moveVect[k].desRoom)
to = moveVect[k].desRoom;
count++;
}
}
if (count > max)
max = count;
}
cout<<TIMEPERMOVE*max<<endl;
}
return 0;
}
还有人给出了不使用贪心的算法,贪心是将每次能同时搬运的桌子都搬运,求总共需要次数。能否同时搬运桌子,取决于搬运使用的走廊是否被占用。因此,实际上我们只需要求出,走廊最多被占用多少次,就可以得出最多要花多少时间,实在是高!
#include <iostream>
using namespace std;
#define MAXN 201
int map[MAXN];
void solve()
{
int i,n,start,end,m;
for(i=0;i<MAXN;i++)//初始化
map[i] = 0;
cin >> n;
while(n--)
{
cin >> start;
cin >> end;
if(start > end)
{
int temp = start;
start = end;
end = temp;
}
for(i=(start+1)/2;i<=(end+1)/2;i++)
map[i] += 1;
}
m = map[1];
for(i=2;i<MAXN;i++)
{
if(map[i]>m)
m = map[i];
}
cout << m*10 << endl;
}
int main()
{
int t;
cin >> t;
while(t--)
solve();
return 0;
}
using namespace std;
#define MAXN 201
int map[MAXN];
void solve()
{
int i,n,start,end,m;
for(i=0;i<MAXN;i++)//初始化
map[i] = 0;
cin >> n;
while(n--)
{
cin >> start;
cin >> end;
if(start > end)
{
int temp = start;
start = end;
end = temp;
}
for(i=(start+1)/2;i<=(end+1)/2;i++)
map[i] += 1;
}
m = map[1];
for(i=2;i<MAXN;i++)
{
if(map[i]>m)
m = map[i];
}
cout << m*10 << endl;
}
int main()
{
int t;
cin >> t;
while(t--)
solve();
return 0;
}
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
分类:
ACM
, C/C++/VC++
posted on 2008-10-28 16:57 Phinecos(洞庭散人) 阅读(849) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2006-10-28 WebCast听课录(10)
2006-10-28 WebCast听课录(9)