百度之星2014复赛 - 1001 - Find Numbers

先上题目:

Find Numbers

Time Limit: 10000/5000 MS
(Java/Others)    Memory Limit: 32768/32768 K
(Java/Others)
Total Submission(s): 26    Accepted
Submission(s): 20
Special
Judge

Problem Description

给n个非负整数,满足对于某正整数k,n=2^k-1。从中选出(n+1)/2个数,使得它们的和是(n+1)/2的倍数。

Input

第一行,T,询问个数。
下面2T行,每两行是一个询问。对于每两行:
第一行,n。
第二行,n个整数,a_0,
a_1, ...,
a_{n-1}。

数据范围:
1<=T<=20
1<=n<=2^15
0<=a_i<=10^9

Output

对第i个(1<=i<=T)询问的回答为两行,第一行为编号:
Case
#i:
第二行为结果:
如果不能选出这样的(n+1)/2个数,输出-1;
否则输出一行,用一个空格分隔的(n+1)/2个数b_0, b_1,
..., b_{(n+1)/2-1}。满足0<=b_i<n,
b_i两两不同,且sum(a_{b_i})是(n+1)/2的倍数。如果有多解,输出任意一个。

Sample Input

2

3

1 3 5

7

0 1 2 3 4 5 6

Sample Output

Case #1:

0 2

Case #2:

0 2 4 6

Source

2014年百度之星程序设计大赛
- 复赛

  中文题意不解释,做法读入所有数字以后保存它们以及它们的下标,然后按照数字大小排序(这里没有看百度放出来的题解,不知道是不是一定要排序,反正我觉得排下序应该也没事),然后枚举数字选(n+1)/2个,如果符合条件就打印,否则继续枚举,知道无法枚举就输出-1。

  上面说的方法很暴力,但还是过了,一开始觉得是不是数据太水了,然后想了一下觉得有可能不是,虽然还没有完全想明白,但是我觉得可能与题目中几个信息点有关:①目标状态是(n+1)/2的倍数,同时要知道n=2^k-1,也就是说结果是二的次幂的倍数。②感觉输出-1的情况可能很少,或者甚至不会出现,自己想找一组可以输出-1的数据的时候发现好像挺难找的。

  总的来说这一题还没有完全弄懂,虽然过了→_→,等有题解的时候去看看。

上代码:

 1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #include <stack>
5 #include <utility>
6 #define MAX 32770
7 #define LL long long
8 using namespace std;
9
10 typedef pair<int,LL> pii;
11
12 pii s[MAX];
13 int n,e;
14 LL f;
15 stack<int> st;
16
17 bool dfs(int c){
18 if(!e){
19 if(f%((n+1)/2)==0) return 1;
20 return 0;
21 }
22 for(int i=c;i<n;i++){
23 st.push(s[i].first);
24 f+=s[i].second;
25 e--;
26 if(dfs(i+1)) return 1;
27 st.pop();
28 f-=s[i].second;
29 e++;
30 }
31 return 0;
32 }
33
34
35
36 int main()
37 {
38 int t;
39 //freopen("data.txt","r",stdin);
40 scanf("%d",&t);
41 for(int z=1;z<=t;z++){
42 scanf("%d",&n);
43 e = (n+1)>>1;
44 for(int i=0;i<n;i++){
45 scanf("%I64d",&s[i].second);
46 s[i].first=i;
47 }
48 sort(s,s+n);
49 while(!st.empty()) st.pop();
50 f=0;
51 printf("Case #%d:\n",z);
52 if(!dfs(0)) printf("-1");
53 else for(int i=0;!st.empty();i++){
54 if(i) putchar(‘ ‘);
55 printf("%d",st.top());
56 st.pop();
57 }
58 putchar(‘\n‘);
59 }
60 return 0;
61 }

1001

百度之星2014复赛 - 1001 - Find Numbers

时间: 2024-08-09 06:23:11

百度之星2014复赛 - 1001 - Find Numbers的相关文章

【百度之星2014~复赛)解题报告】The Query on the Tree

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~复赛)解题报告]The Query on the Tree>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=673 前言

【百度之星2014~复赛 解题报告~正解】The Query on the Tree

声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载.可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站点,因此.笔者加入此条声明. 郑重声明:这篇记录<[百度之星2014~复赛 解题报告~正解]The Query on the Tree>转载自 http://tiankonguse.com/的这条记录:http://tiankonguse.com/record/record.php?id=674

百度之星2014复赛 - 1002 - The Query on the Tree

先上题目: The Query on the Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 54    Accepted Submission(s): 18 Problem Description 度度熊最近沉迷在和树有关的游戏了,他一直认为树是最神奇的数据结构.一天他遇到这样一个问题: 有一棵树,树的每个点有点权,每次有三种

百度之星 2015 复赛 1001 (数长方形)

数长方形 Accepts: 595 Submissions: 1225 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊喜欢玩木棒.一天他在玩木棒的时候,发现一些木棒会形成长方形.小度熊可能是处女座吧,他只会将木棒横竖摆放,这样会形成很多长方形.现在给你一些横竖摆放的木棒,请你帮小度熊数一数形成了多少个长方形. 为了简化题目,一个木棒的端

2014 百度之星初赛题解1001 - Energy Conversion

Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量.不过,幸运的是,作为魔法师的百小度可以耗费V点能量,使

【百度之星2014~初赛解题报告】

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛解题报告]>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=671 前言 最近要毕业了,有半年没做比赛了.这次参加百度

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

百度之星2014初赛第二场

A. Scenic Popularity http://acm.hdu.edu.cn/showproblem.php?pid=4831 思路:景点区会控制休息区的Hot值,我们建立休息区到它最近的景点区的关系,注意处理冲突. 查询和修改都暴力进行,预处理关系,从左到右,然后从右到左遍历一遍即可,更新时候,从被修改的p位置,向两边,与p有关的休息区进行更新.总的时间复杂度O(T*n*K),10^8左右,不到1s可以解决. const int maxn = 10000; const int maxh

【百度之星2014~初赛(第二轮)解题报告】JZP Set

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]JZP Set>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=668 前言 最近要毕业了,有半年