AK300分

果实计数

(count.pas/.c/.cpp)

时间限制:1s,空间限制32MB

题目描述:

淘淘家有棵奇怪的苹果树,这棵树共有n+1层,标号为0~n。这棵树第0层只有一个节点,为根节点。已知这棵树为b叉树,且保证是一颗满b叉树。如图为一颗满3叉树。

现在,该树第n层的每个节点上都结出了一个苹果,淘淘想知道共结了多少苹果。由于数量可能很大,答案要求输出mod k后的结果。

输入描述:

给出第1层的节点数b和层数n和k.

输出描述:

输出苹果数mod k后的结果。

样例输入:

2 10 9

样例输出:

7

数据范围:

30%的数据保证:b<=100,n<=10, k<=100.

100%的数据保证:b<2^31,n<2^31,k<=2^15.

 【题解】

嗯?求n层完全b叉树的节点数?

嗯。。等比数列求和公式。。不对,模数是k,1-q不一定有逆元。。嗯。分治nlog^2n算法。。

嗯。。嗯?

求完全b叉树第n层节点数?

woccccccccc

这题太神辣!!

传说中的二进制拆分倍增算法啊!

(简称快速幂)

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib> inline void read(long long &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} long long b,n,k; long long pow(long long a, long long b)
{
register long long r = , base = a%k;
for(;b;b >>= )
{
if(b & )r *= base, r %= k;
base *= base, base %= k;
}
return r%k;
} int main()
{
read(b), read(n), read(k);
printf("%lld", pow(b,n)%k);
return ;
}

T1

打地鼠游戏

(mouse.pas/.c/.cpp)

时间限制:1s 空间限制:128MB

题目描述:

伟大的2320学长特别喜欢打地鼠游戏,这个游戏开始后,会在地板上冒出一些地鼠来,你可以用榔头去敲击这些地鼠,每个地鼠被敲击后,将会增加相应的游戏分值。可是,所有地鼠只会在地上出现一段时间(而且消失后再也不会出现),每个地鼠都在0时刻冒出,但停留的时间可能是不同的,而且每个地鼠被敲击后增加的游戏分值也可能是不同。

最近2320学长经常玩这个游戏,以至于敲击每个地鼠只要1秒。他在想如何敲击能使总分最大。

输入描述:

输入包含3行,第一行包含一个整数n(1<=n<=100000)表示有n个地鼠从地上冒出来,第二行n个用空格分隔的整数表示每个地鼠冒出后停留的时间(Maxt<=50000),第三行n个用空格分隔的整数表示每个地鼠被敲击后会增加的分值v(v<=1000)。每行中第i个数都表示第i个地鼠的信息。

样例输入:

5

5 3 6 1 4

7 9 2 1 5

样例输出:

24

数据范围:

30%的数据保证n<=100, t<=500,v<=50

60%的数据保证 n<=10000,t<=3000,v<=500

100%的数据保证 n<=100000,t<=5000,v<=1000

 【题解】

嗯。。我太弱辣,居然没有一眼看出贪心策略

把时间限制从大到小排列

从大到小扫时间

把当前时间点的地鼠压入堆

每个时间点从堆中取最大值

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm>
#include <vector>
#define max(a, b) ((a) > (b) ? (a) : (b)) inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} const int MAXN = + ; int n, ma, ans; struct Node
{
int v,t;
}node[MAXN]; bool cmp(Node a, Node b)
{
return a.t > b.t;
} struct cmpp
{
bool operator()(Node a, Node b)
{
return a.v < b.v;
}
}; std::priority_queue<Node, std::vector<Node>, cmpp> q; int main()
{
read(n);
for(register int i = ;i <= n;++ i)
read(node[i].t), ma = max(ma, node[i].t);
for(register int i = ;i <= n;++ i)
read(node[i].v);
std::sort(node + , node + + n, cmp);
register Node tmp;
node[n + ].t = 0x7fffffff;
for(register int now = ma, i = ;now >= ;-- now)
{
while(node[i].t == now)
{
q.push(node[i]);
++ i;
}
if(q.size())
{
tmp = q.top();
ans += tmp.v;
q.pop();
}
}
printf("%d", ans);
return ;
}

T2

斗牛

(niuniu.pas/.c/.cpp)

时间限制:2s,空间限制:128MB

题目描述:

为了更快的获取欢乐豆(因为本蒟蒻斗地主水平太低233),hzwer准备去玩欢乐斗牛,但是由于rp太差,hzwer在一个小时之内输光了20个QQ号的欢乐豆(每天系统会赠送每个号4000欢乐豆)。第二天他准备继续再战欢乐斗牛的抢庄模式,但是由于缺乏思考能力,hzwer需要编写一个程序来决定是否抢庄。

在玩家决定是否抢庄之前,系统会下发四张牌称为底牌,最后一张牌在决定后发放,每张牌可能为1-10,J,Q,K,hzwer认为最后一张牌为每一种点数的概率是相同的,对于一个由五张牌组成的牌型,分数计算规则如下,请你得出底牌的期望得分。

首先注意:在斗牛中,J,Q,K的点数视为10点,即11,12,13在计算头或点数时均视为10,所有牌无视其花色。

首先考虑特殊牌型

  1. 四炸——即5张牌中有4张一样的牌(如33334),分数为40
  2. 五花牛——五张牌均是J,Q或K(如JQJQK),分数为50
  3. 五小牛——五张牌点数都小于5且点数和小于或等于10(如11223),分数为60

若有多种特殊牌型,得分取分数最大的特殊牌型(如11112视为五小牛)。

如果没有特殊牌型,首先判断牌型是否有“头”,如果五张牌中任意三张的总和为10的倍数如(1K9)即为有“头”,无“头”的牌型得分为0。

对于有头的牌型得分计算如下:

所有牌的和记为t,如果t%10=0则称为“牛牛”,牛牛得分为30;t%10<7称为“小牛”,得分为t%10,否则得分为(t%10)*2。

输入描述:

第一行一个整数T,表示T组数据

每组数据占一行,为4个整数(11,12,13分别表示J,Q,K)

输出描述:

对于输入的n行,输出每4张牌的期望得分(四舍五入)

样例输入:

2

2 2 2 2

10 4 5 12

样例输出:

43

9

样例解释:

对于2 2 2 2,最后一张为1或2时,构成五小牛,否则为炸弹,期望得分为(2*60+11*40)/13=43.08

对于10 4 5 12,最后一张为1-13的得分分别是30+0+0+0+4+5+0+0+0+18+18+18+18=111/13=8.54

1为牛牛,5为4点,6为5点,10-13为9点,其余无头

数据范围:

30%的数据T<=5

70%的数据T<=100000

100%的数据T<=1000000

蒟蒻感言:

在某次对局中发现期望得分很高,果断抢了庄,但是发现有闲家3个“牛牛”,瞬间消失20W欢乐豆

【题解】

我太弱辣。。这种题居然还得调一会儿才能调对,应该是一遍过的啊

情况数*10~询问数

所以预处理所有情况即可

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#define min(a, b) ((a) < (b) ? (a) : (b)) inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} int num[],ans[][][][][]; int main()
{
register int t;
read(t);
register int sum,a,b,c,d,e,ta,tb,tc,td,te;
for(a = ;a <= ;++ a)
for(b = ;b <= ;++ b)
for(c = ;c <= ;++ c)
for(d = ;d <= ;++ d)
for(e = ;e <= ;++ e)
{
if(a < && b < && c < && d < && e < && a + b + c + d + e <= )
{
ans[a][b][c][d][e] = ;
}
else if(a > && b > && c > && d > && e > )
{
ans[a][b][c][d][e] = ;
}
else if((a == b&&b==c&&c==d) || (a==b&&b==c&&c==e) || (a==b&&b==d&&d==e) || (b==c&&c==d&&d==e) || (a==c&&c==d&&d==e))
{
ans[a][b][c][d][e] = ;
}
else
{
ta = min(, a), tb = min(, b), tc = min(, c), td = min(, d), te = min(, e);
if((ta + tb + tc)% == || (ta + tb + td)% == || (ta + tb + te)% == || (tb + tc + td)% == || (tb + tc + te)% == || (ta + tc + td)% == || (ta + tc + te)% == || (ta + td + te)% == || (tb + td + te)% == || (tc + td + te)% == )
{
sum = ta + tb + tc + td + te;
if(sum% == ) ans[a][b][c][d][e] = ;
else if(sum% < )ans[a][b][c][d][e] = sum%;
else ans[a][b][c][d][e] = (sum%)*;
}
else
{
ans[a][b][c][d][e] = ;
}
}
}
for(;t;--t)
{
read(num[]),read(num[]),read(num[]),read(num[]);
sum = ;
for(register int i = ;i <= ;++ i)
{
num[] = i;
sum += ans[num[]][num[]][num[]][num[]][num[]];
}
sum = (sum/13.0) + 0.5;
printf("%d\n", sum);
}
return ;
}

T3

最新文章

  1. Web应用性能优化思路
  2. Atitit learn by need 需要的时候学与预先学习知识图谱路线图
  3. CF467D Fedor and Essay 建图DFS
  4. Linux命令详解nice
  5. Java 编程要点之并发(Concurrency)详解
  6. 基于XMPP协议的aSmack源码分析
  7. c结构体初始化问题
  8. ADO.NET与Oracle(一):获取多行记录集
  9. Java疯狂讲义(二)
  10. 《JS权威指南学习总结--9.1 类和模板》
  11. Hibernate调用带有输入参数,输出参数为cursor的存储过程
  12. getResources提取资源文件
  13. UNIX环境高级编程——select、poll和epoll
  14. 来了,老弟!__二进制部署kubernetes1.11.7集群
  15. DOSD用scratch的方式训练通用目标检测,性能很高
  16. [Ubuntu] Git可视化比较工具 P4Merge 的安装/配置及使用
  17. 初识SqlLite ---.net连接数据库
  18. what&#39;s the python之可迭代对象、迭代器与生成器(附面试题)
  19. python中闭包
  20. java script删除数组的方法集合(转载)

热门文章

  1. Chrome快捷键, Mac 下 Chrome 浏览器 快捷键
  2. MySQL中修改多个数据表的字段拼接问题
  3. python3-常用模块之序列化
  4. logcat日志文件
  5. vue-cli 构建项目
  6. CAS增加免登陆(Remember Me)功能
  7. CentOS使用rpm离线安装mariadb
  8. centos的yum配置
  9. 中国 SaaS 企业如何突围?这几点是关键!
  10. 模板:KD-Tree