[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 个人,每一个人都拥有一个数字,分别从 111 至 kkk。
X 拥有 n+mn+mn+m 个数字,这些数字为 nnn 个 111 和 mmm 个大小可由 X 决定的数字(每个数字定好之后不能更换)。
X 能对这些人进行迫害,当且仅当他能用手中若干个数的加和等于被迫害人的数字,一次迫害就成功了(不会消耗数字)。
由于 X 的权利极大,又十分邪恶,他想要从第 111 个人开始一个一个进行迫害行动。
由于小 Z 也在这个被迫害的行列里,他十分的慌张,希望你来告诉他 X 能最多能从第一个人开始连续迫害多少个人。
由于被迫害的人太多了,所以请将答案对 100000000710000000071000000007 取模。
输入格式
第一行两个整数 n,mn,mn,m,表示 X 有 nnn 个 111,有 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 51≤n≤5,1≤m≤51 \le m \le 51≤m≤5。
- 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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++信奥P6195普及组提高 EER1 迫害&spm=1001.2101.3001.5002&articleId=144656874&d=1&t=3&u=10f71060cd7040ba892e879a2db2e3f8)
248

被折叠的 条评论
为什么被折叠?



