hacker cup 2015 资格赛

A:交换一个数的两位,问能得到最大和最小的数是多少。

水题:

 1 // File Name: a.cpp
 2 // Author: darkdream
 3 // Created Time: 2015年01月10日 星期六 17时16分44秒
 4
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25
26 using namespace std;
27 LL a[20];
28 int T;
29 LL SP(LL i , LL j, LL tmp)
30 {
31      int x =(tmp)/a[i] % 10 ;
32      int y =(tmp)/a[j] % 10 ;
33      if(x == 0 && j == T)
34          return tmp;
35      return tmp - x * a[i] - y*a[j] + y *a[i] + x*a[j];
36 }
37 int count(LL tmp)
38 {
39   int num = 0 ;
40    while(tmp)
41    {
42      num ++;
43      tmp/= 10;
44    }
45    return num ;
46 }
47 int main(){
48    int t ;
49    scanf("%d",&t);
50    a[1] = 1;
51    for(int i = 2;i <= 13 ;i++)
52    {
53      a[i] = a[i-1]*10;
54    }
55    for(int ca = 1 ; ca <= t ;ca ++)
56    {
57       LL tmp;
58       scanf("%lld",&tmp);
59       LL mx = tmp;
60       LL mi = tmp;
61       T = count(tmp);
62       for(int i = 1;i <= T;i ++)
63           for(int j = i + 1;j <= T ;j ++)
64           {
65             LL now = SP(i,j,tmp);
66             if(now > mx)
67                 mx = now;
68             if(now < mi)
69                 mi = now;
70           }
71       printf("Case #%d: %lld %lld\n",ca,mi,mx);
72    }
73
74 return 0;
75 }

B:给你n件物品,每个物品都有三种属性值,问从中选取任意件,能不能使得最后得到确定值

解题思路:二进制枚举

解题代码:

 1 // File Name: b.cpp
 2 // Author: darkdream
 3 // Created Time: 2015年01月10日 星期六 17时55分37秒
 4
 5 #include<vector>
 6 #include<list>
 7 #include<map>
 8 #include<set>
 9 #include<deque>
10 #include<stack>
11 #include<bitset>
12 #include<algorithm>
13 #include<functional>
14 #include<numeric>
15 #include<utility>
16 #include<sstream>
17 #include<iostream>
18 #include<iomanip>
19 #include<cstdio>
20 #include<cmath>
21 #include<cstdlib>
22 #include<cstring>
23 #include<ctime>
24 #define LL long long
25
26 using namespace std;
27 int Ga,Gb,Gc;
28 int a[30],b[30],c[30];
29 bool solve(int k)
30 {
31    int t= 0 ;
32    int ta,tb,tc;
33    ta = tb = tc = 0 ;
34    while(k)
35    {
36       if(k % 2)
37       {
38         ta += a[t];
39         tb += b[t];
40         tc += c[t];
41       }
42       k /= 2;
43       t ++ ;
44    }
45   //<F5> printf("%d %d %d\n",ta,tb,tc);
46    if(ta == Ga && tb == Gb&& tc == Gc)
47    {
48        return  1;
49    }
50    return 0 ;
51 }
52 int main(){
53   int T;
54   scanf("%d",&T);
55   for(int ca = 1;ca <= T; ca ++)
56   {
57       scanf("%d %d %d",&Ga,&Gb,&Gc);
58       int n;
59       scanf("%d",&n);
60       for(int i= 0;i < n;i++)
61       {
62         scanf("%d %d %d",&a[i],&b[i],&c[i]);
63       }
64       int total = (1 << n)-1;
65       int ok = 0 ;
66       for(int i =0 ;i <= total;i ++)
67       {
68          if(solve(i))
69          {
70            ok = 1;
71            break;
72          }
73       }
74       if(ok)
75         printf("Case #%d: yes\n",ca);
76       else printf("Case #%d: no\n",ca);
77   }
78 return 0;
79 }

C:给你一个网格图,其中每个网格中有墙,旋转的机关炮台,

时间: 2024-11-10 02:20:42

hacker cup 2015 资格赛的相关文章

hacker cup 2015 Round 1 解题报告

A:求区间内素因子个数等于n的数有多少个 解题思路:筛法 解题代码: 1 // File Name: a.cpp 2 // Author: darkdream 3 // Created Time: 2015年01月18日 星期日 13时54分20秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include&

Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树形动态规划)

原题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意:给定一颗有根树,在树上下层的节点要给上层节点礼物,根节点的礼物则给慈善会,但是给礼物有个条件就是你不能送你的父节点已经送出的礼物.问满足要求的最少花费. 题解:这个题卡了一段时间,类似于染色问题,可以用树形动态规划求解.因为已知节点个数为N,则我们单个节点的最大花费不会超过log2(N) = 18. 1.

Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)

原题:https://www.facebook.com/hackercup/problems.php?pid=688426044611322&round=344496159068801 题意:你和一个朋友玩足球游戏,分数从0-0开始,最终你总是赢,并且你主要有两种方式赢,第一种stressFree方式你肯定要进第一个球并且总是比你的朋友分数高,第二种stressFull方式除了你的朋友达到最终分数时,在游戏中你不可能比你的朋友分数高.给出一个比分,请分别输出在两种情况下你能赢的方式. 题解:类似

Facebook Hacker Cup 2015 Round 1 Homework(附带测试数据)

题目描述: Homework10 points Your first-grade math teacher, Mr. Book, has just introduced you to an amazing new concept - primes! According to your notes, a prime is a positive integer greater than 1 that is divisible by only 1 and itself. Primes seem fun

Facebook Hacker Cup 2015 Round 1 Autocomplete (附带测试数据)

题目描述: Autocomplete25 points Since you crave state-of-the-art technology, you've just purchased a phone with a great new feature: autocomplete! Your phone's version of autocomplete has some pros and cons. On the one hand, it's very cautious. It only a

Facebook Hacker Cup 2015 Round 1 Winning at Sports (附带测试数据)

题目描述: Winning at Sports25 points In the game of Sports, the object is have more points than the other team after a certain amount of time has elapsed. Scores are denoted by two hyphen-separated integers. For example, scores may include 3-2, 4-1, or 1

Facebook Hacker Cup 2015 Round 1--Autocomplete(字典树新建与查询)

题意:给定N个字符串,让你依次先输入到手机的字典中,再打印出来,打印的时候我们只需要输出字符串的前缀或者全部字符串,要求此前缀不是以往任何字符串的前缀. 题解:典型的字典树,可以利用结构体数组方便的新建与查询,速度比链表更快.只需在插入字符串时统计最长相同的前缀即可. 代码如下: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxN 1000005

Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)

题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数因子个数为k的二维数组sumNum[n][k]. factorNum可以由筛选法确定,初始化数组为0. 1. 从小到大遍历给定最大范围内的数,若遍历到数n时,factorNum[n]=0则说明这个数是素数(前面没有它的因子). 2. 然后通过增加n的倍数,来筛选出最大范围内含有素数因子n的数. sumNu

Facebook Hacker Cup 2015 Round 1 --- Homework

给一个区间,求该区间内 质因子个数等于k的数 的个数. 暴力预处理一下啦 #include<cstdio> #include<cstring> using namespace std; const int maxn=10000010; bool pri[maxn]; int cnt[maxn]; void init() { memset(pri,1,sizeof pri); memset(cnt,0,sizeof cnt); for(int i=2;i<=10000000;i