NOIP模拟 9.09
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,所有牌无视其花色。
首先考虑特殊牌型
- 四炸——即5张牌中有4张一样的牌(如33334),分数为40
- 五花牛——五张牌均是J,Q或K(如JQJQK),分数为50
- 五小牛——五张牌点数都小于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
NOIP模拟 9.09的更多相关文章
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
随机推荐
- js微信禁止分享
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js ...
- Box 'laravel/homestead' could not be found.
vbox vagrant.box Homestead 都安裝好的情況下.在homestead目錄下,執行vagrant up出錯 Homestead\scripts\文件夹中,打开homestead. ...
- koa2 安装环境
1.安装koa2 npm install koa@2 -g 2.创建项目 (1)安装koa2生成器 npm install koa-generator -g (2)koa2生成一个test项目 koa ...
- iOS之CATiledLayer的属性简介和使用
1.CATiledLayer简介 CATiledLayer用于大型图片进行分割显示,需要显示的图片才会加载,直接上代码: - (void)viewDidLoad { [super viewDidLoa ...
- 密码学笔记(5)——Rabin密码体制和语义安全性
一.Rabin密码体制 Rabin密码体制是RSA密码体制的一种,假定模数$n=pq$不能被分解,该类体制对于选择明文攻击是计算安全的.因此,Rabin密码体制提供了一个可证明安全的密码体制的例子:假 ...
- tab切换 -- vue
效果: html: // 按钮<div class="orderTab clearfix" @click="toggle()"> <div c ...
- <每日一题>题目18:对象组合和对象构造面试题(深度优先和广度优先的问题)
class Node(object): def __init__(self,sName): self._lChildren = [] self.sName = sName def __repr__(s ...
- vue生成条形码/二维码/带logo二维码
条形码:https://blog.csdn.net/dakache11/article/details/83749410 //安装 cnpm install @xkeshi/vue-barcode / ...
- 构建HBase二级索引
- 【error】vue-style-loader didn't discriminate between server and client
出现这个bug的时候,设置为false