HDU 4038 Stone (模拟 快速幂)
来源:互联网 发布:程序员的呐喊下载 编辑:程序博客网 时间:2024/05/16 14:44
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4038
这个题目wa的数次,数据非常严格,还有所有数据类型都要为long long的比较好
这个题目首先要知道基本的数学知识
首先判断负数的个数,如果为偶数,那么负数不用管了,最后乘起来就OK了
如果负数个数是奇数,那么就把尽可能的在m满足的情况下让这个负数向0靠近
完成之后把所有的0在m的允许的情况下把0变成1,因为0不变成1结果都是0,
之后把所有1变成2,因为1对结果不起作用,但是变成2就立即变成2倍,之后
把2变成3,因为3*3=9 > 2*2*2=8,之后完成
最后看m有没有剩余,之后的解释看程序中的若干if else
#include <iostream>#include <string.h>#include <stdio.h>#include <algorithm>#include <cmath>using namespace std;#define maxn 110000#define MOD 1000000007#define my_abs(a) (a>0?a:-a)#define LL __int64LL rec[maxn];LL m,n;LL MUL(LL a,LL k,LL mo){ LL b=1; while(k>=1){ if(k%2==1) b=(a*b)%mo; a=(a*a)%mo,k=k/2; } return b;}int solve(){ LL i,j,k; bool flag=false; LL a,b,ans=1,pos; for(i=1;i<n;i++) if(rec[i] >= 0) break; k=i-1; if(rec[k] < 0){//表示确实有小于0的,如果为奇数个把最大的那个负数变成0(在m允许的条件下,如果不行尽量向0靠近) if(k%2==0){ if(my_abs(rec[k]) <=m) m-=my_abs(rec[k]),rec[k]=0; else rec[k]+=m,m=0; } else k++; } for(i=0;i<n && m>0;i++){//把所有为0的变成1 if(rec[i]==0 ) rec[i]=1,m--,pos=i; } for(i=k;i<n&& m>0;i++){//把所有为1的变成2 if(rec[i]==1 ) rec[i]=2,m--,pos=i; } for(i=0;i<n && m>0;i++){//把所有为2的变成3 if(rec[i]==2) rec[i]=3,m--,flag=true,pos=i; } if (m >= 3){ ans = ans * MUL(3, (m/3)-1,MOD) % MOD; if (m % 3 == 0) ans = ans*3 % MOD; else if (m % 3 == 1) ans = ans*4 % MOD; else ans = ans*2*3 % MOD; }else if(m == 2) ans = ans * 2 %MOD; else if(m == 1) rec[pos]++; for(i = 0; i < n; i++) ans = ans*rec[i]%MOD; printf("%I64d\n",ans%MOD); return 0;}int main(){ LL i,j,k=0,t; scanf("%I64d",&t); while(t--){ scanf("%I64d%I64d",&n,&m); for(i=0;i<n;i++) scanf("%I64d",&rec[i]); sort(rec,rec+n); printf("Case %I64d: ",++k); solve(); } return 0;}
- HDU 4038 Stone (模拟 快速幂)
- hdu 4038 模拟+贪心 Stone
- hdu 4038 Stone(贪心模拟)
- hdoj 4038 Stone(贪心+快速幂)
- HDU 4038 Stone
- Hdu Stone Game ( 博弈论 )
- hdu 4764 Stone(博弈)
- HDU-1005 Number Sequence(矩阵快速幂或模拟)
- CSU 1202 Stone-scissors-cloth (模拟)
- hdu 4764(stone) 巴什博弈
- HDU 4764 Stone(简单博弈)
- hdu 1729 Stone Game(SG函数)
- hdu 4764 Stone(巴什博弈)
- HDU 1729 Stone Game (sg函数)
- HDU 1729 Stone Game(SG函数)
- An Old Stone Game(poj1694模拟与排序)
- HDU 4038 Stone(11年成都网络赛-H题-贪心)
- hdu 1729 Stone Game
- HDU 4696 Answers (水题)
- VS 2010 制作 Windows Service 安装包
- iOS控件的Sent Events的含义
- Python排序算法-选择排序
- 【屌丝学习笔记】第四天 JAVA基础
- HDU 4038 Stone (模拟 快速幂)
- android ScrollView 下嵌ListView完美实现
- 循环单向链表
- 海量数据随机抽样问题(蓄水池问题)
- 直接拿来用!10段超有用的Git命令行代码
- sql常用——笔记
- Linux设备驱动之简单字符设备驱动开开发
- Android二维码功能实现,在程序内嵌入ZXing项目
- JavaScript语言核心