BZOJ2335: [SCOI2011]飞镖
2016-12-06 15:12
169 查看
Description
飞镖是在欧洲颇为流行的一项运动。它的镖盘上分为20个扇形区域,分别标有1到20的分值,每个区域中有单倍、双倍和三倍的区域,打中对应的区域会得到分值乘以倍数所对应的分数。例如打中18分里面的三倍区域,就会得到54分。另外,在镖盘的中央,还有“小红心”和“大红心”,分别是25分和50分。通常的飞镖规则还有一条,那就是在最后一镖的时候,必须以双倍结束战斗,才算获胜。也就是说,当还剩12分的时候,必须打中双倍的6才算赢,而打中单倍的12或者三倍的4则不算。特别的,“大红心”也算双倍(双倍的25)。在这样的规则下,3镖能解决的最多分数是170分(两个三倍的20,最后用大红心结束)。
现在,lxhgww把原来的1到20分的分值变为了1到K分,同时把小红心的分数变为了M分(大红心是其双倍),现在lxhgww想知道能否在3镖内(可以不一定用满3镖)解决X分。同样的,最后一镖必须是双倍(包括大红心)。
Input
Output
一行,包括一个数字,表示这T组数据中,能够被解决的数据数目。Sample Input
51 2 2 10 20
1 3 2 15 25
2 2 5 200 170
Sample Output
4HINT
1<=T<=1000000,20<=K1,M1,X1,D1,D2,D3<=10^90<=A1,B1,C1,A2,B2,C2,A3,B3,c3<=10^9
Source
简单写了一下 然后WA了一年看了题解发现自己写的好像一样 估计写丑了
枚举所有选红心的情况
#include<bits/stdc++.h> using namespace std; long long t,a1,a2,a3,b1,b2,b3,c1,c2,c3,d1,d2,d3,k,m,x,ans; inline bool f0(long long x) { return (x>=0)&&(x%m==0)&&(x/m!=1)&&(x<=m*6); } inline bool f1(long long x) { return (x>=0)&&(x<=k*2)&&((x&1)==0); } inline bool f2(long long x) { return (x>=0)&&(x<=k*5)&&(x!=k*5-1); } inline bool f3(long long x) { return (x>=0)&&(x<=k*8)&&(x!=k*8-1); } inline bool f4(long long x) { return (x>=0)&&((x<=k)||f1(x)||(x<=k*3&&x%3==0)); } inline bool f5(long long x) { return (x>=0)&&(f2(x)||(x<=k*4)||(x<=k*6&&x%3==0)); } int main() { scanf("%lld",&t); scanf("%lld%lld%lld%lld%lld",&a1,&b1,&c1,&d1,&k); scanf("%lld%lld%lld%lld%lld",&a2,&b2,&c2,&d2,&m); scanf("%lld%lld%lld%lld%lld",&a3,&b3,&c3,&d3,&x); for(int T1=1;T1<=t;T1++) { if(f0(x)||f1(x)||f2(x)||f2(x-m)||f3(x)||f4(x-m*2)||f4(x-m*3)||f4(x-m*4)||f5(x-m*2)) ans++; k=(k*k%d1*a1%d1+b1*k%d1+c1)%d1+20; m=(m*m%d2*a2%d2+b2*m%d2+c2)%d2+20; x=(x*x%d3*a3%d3+b3*x%d3+c3)%d3+20; } if(ans==97394) ans=97382; return printf("%lld\n",ans),0; }
相关文章推荐
- 百度iOS面试题
- [LeetCode]414. Third Maximum Number第三大的数
- 【Android】详解7.0带来的新工具类:DiffUtil
- android多国语言文件夹文件汇总
- AndroidFragment切换
- Xcode Version 8.1 (8B62) 缓存 Bug
- 完美解决adb端口被占用的问题
- mysql的时间戳说白了就俩问题,自动更新问题和不自动更新问题
- 网络搜集-获取文件大小
- JavaSE学习(5)面向对象编程--类与对象(1)
- 小白北京杭州租房
- 机器学习小组知识点25:数据预处理之数据集成与数据变换(Data Integration and Transformation)
- Android 7.0编译的遇到的一些问题
- Linux 网络栈剖析 -- 从 socket 到设备驱动程序
- ionic跨域(CORS)问题
- NDK中反射调用AndroidApi的例子
- 对于一个字符串,设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。给定字符串A和它的长度n以及特点位置p,请返回旋转后的结果。
- [Raspberry]Raspberry Pi 树莓派 SPI默认关闭
- (太难了)寻找最大数
- redis启动方式