目录
前言:
Problem A: a^b
题解:
Problem B:起床困难综合症
题解:
大三了,玩了两年,连个蓝桥的国二都没摸到,痛定思痛,决定好好学习一下之前学的算法,在这立个flag,明年蓝桥冲刺国二(国一不敢想,蒟蒻.jpg)整理一下所学的知识点,主要写题为主,不会有知识的讲解,最多有个思路,每个章节会随机抽取两三道题(懒癌.jpg)。更新频率.....最近要考CET,18号之后稳定更新。
刷题平台:牛客竞赛—算法进阶指南(传送门)
题目描述:
求 a 的 b 次方对 p 取模的值,其中 0≤a, b, p≤10^9
输入描述:
三个用空格隔开的整数a,b和p。
输出描述:
一个整数,表示a^b mod p的值。
示例1:
输入:
2 3 9输出:
8
/*
b=2^k+2^(k-1)+2^(k-2)...+2^0;(仅当二进制下b的第k位为1)
b&1取出最低位
1.若为1 ans=ans*a%p a=a*a%p b>>=1
2.若为0 a=a*a%p b>>=1
为了保证a的指数永远是2^i 故a = a * a
tips:
a*b%p=(a%p*b%p)%p
*/
#include
#define ll long long
using namespace std;
int main() {
ll a, b, p, ans;
cin >> a >> b >> p;
ans = 1%p;
while(b){
if(b&1) ans = ans * a % p; //当b的最后一位为1 ,乘a
b>>=1; //每次b向右移动一位,表示整除2
a=a*a%p; //每次让a翻倍
}
cout << ans;
return 0;
}
题目描述:
21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为 drd 的巨龙,它掌握着睡眠之精髓,能随意延长大家的睡眠时间。正是由于 drd 的活动,起床困难综合症愈演愈烈,以惊人的速度在世界上传播。为了彻底消灭这种病,atm 决定前往海底,消灭这条恶龙。
历经千辛万苦,atm 终于来到了 drd 所在的地方,准备与其展开艰苦卓绝的战斗。drd 有着十分特殊的技能,他的防御战线能够使用一定的运算来改变他受到的伤害。具体说来,drd 的防御战线由 扇防御门组成。每扇防御门包括一个运算 op 和一个参数 ,其中运算一定是 OR,XOR,AND 中的一种,参数则一定为非负整数。如果还未通过防御门时攻击力为 ,则其通过这扇防御门后攻击力将变为 op 。最终drd 受到的伤害为对方初始攻击力 依次经过所有 扇防御门后转变得到的攻击力。
由于atm 水平有限,他的初始攻击力只能为 0 到 之间的一个整数(即他的初始攻击力只能在 0, 1, … , 中任选,但在通过防御门之后的攻击力不受 的限制)。为了节省体力,他希望通过选择合适的初始攻击力使得他的攻击能让 drd受到最大的伤害,请你帮他计算一下,他的一次攻击最多能使 drd 受到多少伤害。
输入描述:
第 1 行包含2 个整数,依次为 , ,表示drd 有 扇防御门,atm 的初始攻击力为 0 到 之间的整数。
接下来 行,依次表示每一扇防御门。每行包括一个字符串 op 和一个非负整数 ,两者由一个空格隔开,且 op 在前, 在后,op 表示该防御门所对应的操作, 表示对应的参数。
输出描述:
输出一行一个整数,表示atm 的一次攻击最多使 drd 受到多少伤害。
示例1:
输入:
3 10
AND 5
OR 6
XOR 7输出:
1
tips:
/*
对应位置结果只和对应位置初始值有关系,所以我们打一个表,每个位置是0或1 运算后的对应结果。
表打完后用到贪心,从高位向低位贪心。
如果在该位上 0的结果是1 那么在这位放上0 ,如果只有1的结果是1,判断一下总和是否超过了M再累加答案。
*/
#include
#define MAXN 100005
using namespace std;
int N,M,A=0,B=(1<<31)-1,tmp,ans,sum;
char s[5];
int main()
{
cin >> N >> M;
for(int i=1;i<=N;i++){
cin >> s >> tmp;
if(s[0]=='A')A&=tmp,B&=tmp;
if(s[0]=='O')A|=tmp,B|=tmp;
if(s[0]=='X')A^=tmp,B^=tmp;
}
for(int i=31;i>=0;i--){
bool f1=A&(1<
又是划水的一天,hhh,晚安 ┗( ˘ω˘ )┛