打卡信奥刷题(466)用C++信奥P6195[普及组/提高] [EER1] 迫害

[EER1] 迫害

题目背景

"In Germany they first came for the Communists,

and I didn’t speak up because I wasn’t a Communist.

Then they came for the Jews,

and I didn’t speak up because I wasn’t a Jew.

Then they came for the trade unionists,

and I didn’t speak up because I wasn’t a trade unionist.

Then they came for the Catholics,

and I didn’t speak up because I was a Protestant.

Then they came for me ,

and by that time no one was left to speak up."

– Pastor Martin Niemöller

”起初他们迫害共产党员,我没有说话,因为我不是马克思的信徒。

后来他们迫害犹太人,我没有说话,因为我是日耳曼人。

再后来他们迫害天主教徒,我没有说话,因为我是新教牧师。

最后他们迫害到我头上,我环顾四周,却再也没有人能为我说话。”

题目描述

kkk 个人,X 要对这 kkk 个人进行迫害。

kkk 个人,每一个人都拥有一个数字,分别从 111kkk

X 拥有 n+mn+mn+m 个数字,这些数字为 nnn111mmm 个大小可由 X 决定的数字(每个数字定好之后不能更换)。

X 能对这些人进行迫害,当且仅当他能用手中若干个数的加和等于被迫害人的数字,一次迫害就成功了(不会消耗数字)。

由于 X 的权利极大,又十分邪恶,他想要从第 111 个人开始一个一个进行迫害行动。

由于小 Z 也在这个被迫害的行列里,他十分的慌张,希望你来告诉他 X 能最多能从第一个人开始连续迫害多少个人。

由于被迫害的人太多了,所以请将答案对 100000000710000000071000000007 取模。

输入格式

第一行两个整数 n,mn,mn,m,表示 X 有 nnn111,有 mmm 个大小可自定的数。

输出格式

请你告诉小 Z,X 能迫害多少个人。

样例 #1

样例输入 #1

1 2

样例输出 #1

7

样例 #2

样例输入 #2

2 2

样例输出 #2

11

提示

【样例 1 解释】

X 选取 222 个数分别为 2,42,42,4,可知能连续迫害 777 个人。

【样例 2 解释】

X 选取 222 个数分别为 3,63,63,6,可知能连续迫害 111111 个人。


【数据范围】

本题采用捆绑测试。

  • Subtask 1(50 points):1≤n≤51 \le n \le 51n51≤m≤51 \le m \le 51m5
  • Subtask 2(30 points):保证答案在取模前在 101810^{18}1018 之内。
  • Subtask 3(20 points):无特殊限制。

对于 100%100\%100% 的数据,$1 \le n \le 10^6 $,$1 \le m \le 10^9 $。

C++实现

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mo 1000000007
int main(){
ll n,m;
scanf(“%lld%lld”,&n,&m);
printf(“%lld\n”,(n+1)* ( (ll) (pow(2,m)) ) %mo-1);
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值