博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HNU 13308 Help cupid
阅读量:5815 次
发布时间:2019-06-18

本文共 1476 字,大约阅读时间需要 4 分钟。

 Help cupid

Problem's Link:


 

Mean: 

地球被划分为24个时区(-11~23),现在给出n个人的时区,将这n个人两两配对,使得n/2对配偶的时区差值之和最小。

analyse:

由于给的都是整数,而且只有24个时区,首先统计每个时区有多少人。

然后每个时区的人数都%2,因为同一时区的两个人差值为0。

接着就是枚举人数不为零的时区的人数。

根据贪心的思想,我们知道除了第一个和最后一个外,其他人都是和相邻两个的其中一个匹配,为什么呢?自己画个圈去证明。

对于第一个和最后一个,要么最后特判一下,要么直接在数组后面接一个每个元素+24的数组(处理环常用方法),暴力一下就行。

Time complexity: O(N)

 

Source code: 

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-07-26-08.27
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define  LL __int64
#define  ULL unsigned long long
using
namespace
std;
int
a
[
50
],
ti
[
50
];
int
main()
{
     
ios_base
::
sync_with_stdio(
false);
     
cin
.
tie(
0);
     
int n
,
tmp;
     
while(
cin
>>n)
     
{
           
memset(
a
,
0
,
sizeof
a);
           
for(
int
i
=
0;
i
<n;
++
i)
           
{
                 
cin
>>
tmp;
                 
a
[
tmp
+
11
]
++;
           
}
           
for(
int
i
=
0;
i
<
50;
++
i)
a
[
i
]
&=
1;
           
int
cnt
=
0;
           
for(
int
i
=
0;
i
<
50;
++
i)
           
{
                 
if(
a
[
i
])
ti
[
cnt
++
]
=
i;
           
}
           
int
c
=
cnt;
           
for(
int
i
=
0;
i
<
c;
++
i)
ti
[
cnt
++
]
=
ti
[
i
]
+
24;
           
LL
ans
=
LLONG_MAX;
           
for(
int
i
=
0;
i
<
c;
++
i)
           
{
                 
LL
sum
=
0;
                 
for(
int
j
=
0;
j
<
c;
j
+=
2)
sum
+=
ti
[
i
+
j
+
1
]
-
ti
[
i
+
j
];
                 
ans
=
ans
<
sum
?
ans:
sum;
           
}
           
if(
ans
==
LLONG_MAX)
cout
<<
0
<<
endl;
           
else
cout
<<
ans
<<
endl;
     
}
     
return
0;
}
/*
*/

 

转载于:https://www.cnblogs.com/crazyacking/p/4677130.html

你可能感兴趣的文章
java数据类型
查看>>
数据结构——串的朴素模式和KMP匹配算法
查看>>
FreeMarker-Built-ins for strings
查看>>
验证DataGridView控件的数据输入
查看>>
POJ1033
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
一维数组
查看>>
Linux学习笔记之三
查看>>
CentOS 6.6 FTP install
查看>>
图解Ajax工作原理
查看>>
oracle导入导出小记
查看>>
聊一聊log4j2配置文件log4j2.xml
查看>>
NeHe OpenGL教程 第七课:光照和键盘
查看>>
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>