<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
#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 ;
}
还有人给出了不使用贪心的算法,贪心是将每次能同时搬运的桌子都搬运,求总共需要次数。能否同时搬运桌子,取决于搬运使用的走廊是否被占用。因此,实际上我们只需要求出,走廊最多被占用多少次,就可以得出最多要花多少时间,实在是高!
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
#include
<
iostream
>
using namespace std;
#define MAXN201
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 MAXN201
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 ;
}