BISTU-(1)-4-17-2016

A:贪心,遍历每次维护一个最便宜的价格,假如当前价格不如此前价格,就用此前价格购买当前数量的肉,每次更新最便宜的价格。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 typedef struct Node {
23     int a;
24     int p;
25     int day;
26 }Node;
27 const int maxn = 100010;
28 int n;
29 Node orz[maxn];
30
31
32 int main() {
33     // freopen("in", "r", stdin);
34     while(~scanf("%d", &n)) {
35         int minn = 0x7f7f7f;
36         int midx;
37         int ans = 0;
38         for(int i = 1; i <= n; i++) {
39             scanf("%d %d", &orz[i].a, &orz[i].p);
40             if(minn > orz[i].p) {
41                 minn = orz[i].p;
42                 ans += minn * orz[i].a;
43             }
44             else {
45                 ans += minn * orz[i].a;
46             }
47         }
48         cout << ans << endl;
49     }
50     return 0;
51 }

A

B:根据一个性质2^k=2*2^(k-1),每次计数不同幂的个数,假如有偶数个就向下一个数进位并划归为下一个数的个数(k/2个),直到k是奇数的时候,这时候举一次再更新。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 typedef long long ll;
23 const int maxn = 1100010;
24 int n;
25 ll dp[maxn];
26
27 int main() {
28     // freopen("in", "r", stdin);
29     int w;
30     while(~scanf("%d", &n)) {
31         memset(dp, 0, sizeof(dp));
32         for(int i = 1; i <= n; i++) {
33             scanf("%d", &w);
34             dp[w]++;
35         }
36         ll ans = 0;
37         for(int i = 0; i < maxn; i++) {
38             dp[i+1] += dp[i] / 2;
39             ans += dp[i] % 2;
40         }
41         printf("%I64d\n", ans);
42     }
43     return 0;
44 }

B

C:利用fibonacci通项公式,先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);假设给出一个数10234432,

那么log10(10234432)=log10(1.0234432*10^7)【用科学记数法表示这个数】=log10(1.0234432)+7;

log10(1.0234432)就是log10(10234432)的小数部分.

log10(1.0234432)=0.010063744(取对数所产生的数一定是个小数)

再取一次幂:10^0.010063744=1.023443198

取前4位,只需要将这个结果乘1000就可以了。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 typedef long long LL;
23 int f[21];
24 int n;
25
26 void init() {
27     f[0] = 0;
28     f[1] = 1;
29     for(int i = 2; i < 21; i++) {
30         f[i] = f[i-1] + f[i-2];
31     }
32 }
33
34 void solve() {
35     if(n < 21) {
36         printf("%d\n", f[n]);
37     }
38     else {
39         int answer;
40         double ans = -0.5 * log10(5.0) + n * log10((1+sqrt(5))/2);
41         ans -= floor(ans);
42         ans = pow(10, ans);
43         answer = int(ans * 1000);
44         printf("%d\n", answer);
45     }
46 }
47
48 int main() {
49     // freopen("in", "r", stdin);
50     init();
51     while(~scanf("%d", &n)) {
52         solve();
53     }
54     return 0;
55 }

C

D:找出a数组里第k小的,再找出b数组里第m大的,假如a数组里k小的数都比b数组里m大的数小,那就满足条件。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 const int maxn = 100010;
23 int na, nb;
24 int k, m;
25 int a[maxn], b[maxn];
26
27 int main() {
28     // freopen("in", "r", stdin);
29     while(~scanf("%d %d", &na, &nb)) {
30         scanf("%d %d", &k, &m);
31         for(int i = 1; i <= na; i++) scanf("%d", &a[i]);
32         for(int i = 1; i <= nb; i++) scanf("%d", &b[i]);
33         sort(a+1, a+na+1);
34         sort(b+1, b+nb+1);
35         if(a[k] < b[nb-m+1]) puts("YES");
36         else puts("NO");
37     }
38
39     return 0;
40 }

D

E:某人有n个朋友,这n个朋友有钱数m和关系s两个属性。问如何选择朋友,使得这些朋友之间s最大差距小于d并且钱数是最多。

可以用滑动窗口,将m从小到大,s从大到小排列,这时在一个队列里维护队首和队尾,假如队首和队尾的s差距≥d时,就把队尾扔掉队首入队否则就仅队首入队。此时更新一下当前最大值。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 typedef long long ll;
23 typedef struct Node {
24     int m;
25     int s;
26 }Node;
27 const int maxn = 100010;
28 int n, d;
29 Node f[maxn];
30
31 bool cmp(Node a, Node b) {
32     if(a.m == b.m) return a.s > b.s;
33     return a.m < b.m;
34 }
35
36 int main() {
37     // freopen("in", "r", stdin);
38     while(~scanf("%d %d", &n, &d)) {
39         for(int i = 1; i <= n; i++) {
40             scanf("%d %d", &f[i].m, &f[i].s);
41         }
42         sort(f+1, f+n+1, cmp);
43         ll curans = 0;
44         ll ans = 0;
45         int front = 1;
46         int tail = 1;
47         while(1) {
48             if(front > n || tail > n) break;
49             if(f[tail].m - f[front].m >= d)
50                 curans -= f[front++].s;
51             else curans += f[tail++].s;
52             ans = max(ans, curans);
53         }
54         printf("%I64d\n", ans);
55     }
56     return 0;
57 }

E

F:先排序,知道第1个肯定和第n个离得最远,而和第2个离得最近。同理第n个和第1个离得最远,和第n-1个离得最近。固定这两个,接下来在中间找i,最远的话和1和n比,最近的话和i-1和i+1比。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 const int maxn = 1555555;
23 int n;
24 int x[maxn];
25
26 int main() {
27     // freopen("in", "r", stdin);
28     while(~scanf("%d", &n)) {
29         for(int i = 1; i <= n; i++) {
30             scanf("%d", &x[i]);
31         }
32         sort(x+1,x+n+1);
33         printf("%d %d\n", abs(x[1]-x[2]), abs(x[1]-x[n]));
34         for(int i = 2; i < n; i++) {
35             printf("%d %d\n", abs(x[i]-x[i-1]<abs(x[i]-x[i+1]))?abs(x[i]-x[i-1]):abs(x[i]-x[i+1]),
36                                (abs(x[i]-x[n])>abs(x[i]-x[1]))?abs(x[i]-x[n]):abs(x[i]-x[1]));
37         }
38         printf("%d %d\n", abs(x[n]-x[n-1]), abs(x[1]-x[n]));
39     }
40     return 0;
41 }

F

G:按照从左到右的顺序,找一个子串。使得这个子串看成是上下左右移动步骤的时候可以走回远点。算算每一个子串里上下左右的个数就行了,假如上的次数等于下的次数,左的次数等于右的次数就说明可以回到原点。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <iomanip>
 4 #include <cstring>
 5 #include <climits>
 6 #include <complex>
 7 #include <fstream>
 8 #include <cassert>
 9 #include <cstdio>
10 #include <bitset>
11 #include <vector>
12 #include <deque>
13 #include <queue>
14 #include <stack>
15 #include <ctime>
16 #include <set>
17 #include <map>
18 #include <cmath>
19
20 using namespace std;
21
22 const int maxn = 555555;
23 int n;
24 char str[maxn];
25
26 int main() {
27     // freopen("in", "r", stdin);
28     while(~scanf("%d", &n)) {
29         scanf("%s", str);
30         int ans = 0;
31         int u, d, l, r;
32         for(int i = 0; str[i]; i++) {
33             u = d = l = r = 0;
34             for(int j = i; str[j]; j++) {
35                 if(str[j] == ‘U‘) u++;
36                 if(str[j] == ‘D‘) d++;
37                 if(str[j] == ‘L‘) l++;
38                 if(str[j] == ‘R‘) r++;
39                 if(l == r && u == d) {
40                     for(int k = i; k <= j; k++) {
41                         printf("%c", str[k]);
42                     }
43                     printf("\n");
44                     ans++;
45                 }
46             }
47         }
48         printf("%d\n", ans);
49     }
50     return 0;
51 }

G

时间: 2024-11-20 02:28:25

BISTU-(1)-4-17-2016的相关文章

stand up meeting 1/15/2016 &amp;&amp; work of weekend 1/16/2016~1/17/2016

part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  组内对生词卡片又重新进行了讨论:准备最后的发布和整个开发的整理总结   6 查漏补缺,扫除UI bug;用户体验相关    6 foxit PDF Reader 朱玉影       login 周以舟         sync 林建平         foxit PDF Reader 张葳        

Intermediate Jan 17 2016

【学院官方整理】2016年备战上半年软考通关秘籍(内含经典押题资料)

亲爱的学员们: 您好!51CTO学院为梦想增值,诚邀您的关注!51CTO学院致力于让专家分享技术并让技术变现,让广大技术爱好者便捷.实惠的获取优质学习资源. 为了方便大家的学习,我们特别整理了2016年备战上半年软考通关秘籍(内含经典押题资料),点击查看更多>> 2016年备战上半年软考通关秘籍(内含经典押题资料) 企业招聘要求 随着互联网发展和IT技术的普及,网络和IT已经日渐深入到日常生活和工作当中,许多企事业单位的业务依赖于信息系统安全运行,国家和社会对网络与信息安全工程师的需求越来越大

egrep及文本处理工具

egrep: 能够实现文本处理的三剑客: 文本过滤工具:grep (其实grep家族中有三个工具,也就是实现文本过滤的工具有三个,grep,                                       egrep,fgrep) 文本编辑工具:sed 文本报告生成器(格式化文本):awk 其实文本过滤工具除了grep之外还有egrep,fgrep grep:基本正则表达式: -E:选项表示支持扩展正则表达式: -F:选项表示支持fgrep正则表达式: egrep:扩展正则表达式:

zabbix2.2升级到zabbix3.0.2

1.操作系统环境 [[email protected] ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m [[email protected] ~]# uname -r 2.6.32-358.el6.x86_64 [[email protected] ~]# uname -m x86_64 备份备份.. [[email protected] ~]# cp -a /usr/share/zabbix /tmp/zabbi

no module named win32com.client 错误解决

no module named win32com.client错误解决 一.错误描述 运行import win32com.client 的时候发现有import Error  no module named win32com.client这个提示,表明该模块未安装. 二.下载模块 从  https://sourceforge.net/projects/pywin32/files/pywin32/  下载相应Python版本的模块.安装后问题即解决. pywin32-220.win-amd64-p

MySQL使用笔记(七)排序和限制数据记录查询

By francis_hao    Dec 17,2016 排序数据记录查询 排序是指将筛选出符合条件的数据进行有序排放,有升序(ASC(默认))方式和降序(DESC)方式. mysql> select field1 field2-- from table_name [where 条件] order by fieldm1 [asc|desc],fieldm2 asc|desc,--; 这里的第二个排序字段,会在第一个排序字段相同的情况下进行排序.若第一个排序字段没有相同项,则第二个排序字段无作用

git 教程(4)--版本回退

现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. Git is free software distributed under the GPL. 然后尝试提交: 1 git add readme.txt 2 git commit -m "append GPL" [master 9a36c54] append GPL 1 file cha

第十周PSP

PSP 日期 类别 内容 开始时间 结束时间 间隔时间 净时间 2016.11.17  --  --  --  --  --  -- 2016.11.18  --  --  --  --  --  -- 2016.11.19  测试  找bug  18:00  19:30  10  80 2016.11.20  学习  Python语法  18:00  19:00  0  60 2016.11.21  学习  设计模式原则  18:00  19:00  10  50 2016.11.22  随笔

git使用笔记(一)入门

By francis_hao    Nov 17,2016 本来是想把git的使用笔记写在一个文件里,但是越写越长,最后也不得不分开了.这样也好,每一篇一个侧重,可以写的详细一点. 初学乍练 在linux系统执行下面的命令,查看是否已经安装了git,若没有安装则需要到http://git-scm.com/download/ 上下载并安装. $ git –versiongit version 1.8.3.1 git基本配置 配置的设置是一次性的工作,这些设置会在全局文件(用户主目录下的.gitco