代码源Div2 501-603
501 RSA
RSA算法选择两个不同质数的积作为模数。现在有两个正整数 A,B,如果它们是不同的质数,则判定为 full credit
;否则,如果A⋅B 不是任意大于11的整数的平方的整数倍,则判定 partial credit
;否则判定为no credit
。
输入格式
一行两个正整数 A,B。
输出格式
full credit
或 partial credit
或 no credit
。
样例1输入
13 23
样例1输出
full credit
样例2输入
3 3
样例2输出
no credit
数据规模
所有数据保证 2≤A,B≤10^12。
代码:
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int> m;
void check(int x)
{for(int i=2;i<=x/i;i++){if(x%i==0){m[i]++;m[x/i]++;}}
}
int main()
{int a,b;scanf("%d%d",&a,&b);if(a==b){printf("no credit\n");return 0;}check(a);check(b);bool flag=false;for(auto i:m){int x=sqrt(i.first);if(i.second>1||x*x==i.first){flag=true;break;}}if(m.size()==0) printf("full credit\n");else if(flag) printf("no credit\n");else printf("partial credit\n");return 0;
}
502 数组操作
给你一个有 n 个元素的数组 a。你可以对它进行如下操作,次数不限。
从一个偶数大小为 2k 的数组中选择一些从位置 l 开始的子数组(1≤ l ≤ l+2⋅k −1 ≤ n , k≥1) ,对于 0 到 k−1(包括)之间的每一个 i ,将值 a(l+k+i) 分配给 a(l+i) 。。
例如,如果 a=[2,1,3,4,5,3],然后选择 l=1和 k=2,应用这个操作,数组将变成 a=[3,4,3,4,5,3]。
请找出使数组中所有元素相等所需的最少操作数(可能是零)。
输入格式
输入由多个测试用例组成。第一行输入一个整数 t(1≤t≤2×10^4)表示测试用例的数量。
每个测试用例的包含 (n+1) 个整数:
第一个整数 n(1≤n≤2×10^5)表示数组的长度。
此后 n 个整数 a1,a2,...,an(1≤ai≤n) 表示数组的元素。
输出格式
输出 t 行,每行一个整数表示用给定的操作使数组中所有元素相等所需的最小操作数。
样例输入
5
3 1 1 1
2 2 1
5 4 4 4 2 4
4 4 2 1 3
1 1
样例输出
0
1
1
2
0
数据规模
保证所有测试用例的 n 之和不超过 200000。
提示
在第一个测试中,所有元素都是相等的,因此不需要任何操作。
在第二个测试中,你可以应用一个操作,k=1,l=1,设置 a1←a2,通过 1 个操作,数组变成 [1,1]。
在第三个测试中,你可以应用一个操作,k=1,l=4,设置 a4←a5 ,然后数组变成 [4,4,4,4,4]。
在第四个测试中,你可以应用一个操作,k=1,l=3,设置 a3←a4,数组变成 [4,2,3,3],然后你可以应用另一个操作,k=2,l=1,设置 a1←a3,a2←a4, 数组变成 [3,3,3,3]。
在第五次测试中,只有一个元素,因此不需要任何操作。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int N=1e5+10;int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int t;cin>>t;while(t--){int n;cin>>n;vector<int> v(n);for(int i=n-1;i>=0;--i){cin>>v[i];}int num=v[0],res=0,ans=1;while(ans<n){if(v[ans]==num) ans++;else{res++;ans*=2;}}cout<<res<<'\n';}return 0;
}
503 A-B 数对
给出一串数以及一个数字 C ,要求计算出所有 A−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
输入格式
输入共两行。
第一行,两个整数 N, C。
第二行, N个整数,作为要求处理的那串数。
输出格式
一行,表示该串数中包含的满足 A−B=C 的数对的个数。
样例输入
4 1
1 1 2 3
样例输出
3
数据范围
1≤N≤2×10^5, 1≤C≤2×10^5, 题目保证输入的 N 个数范围小于 2^30。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int N=1e5+10;
int a[N];
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);int n,c;cin>>n>>c;for(int i=1;i<=n;++i) cin>>a[i];sort(a+1,a+n+1);int ans=0;for(int j=1,i=2;i<=n;++i){if(a[i]-a[j]<c) continue;while(a[i]-a[j]>=c){if(a[i]-a[j]==c) ++ans;++j;}}cout<<ans;return 0;
}
504 数位计算
给出一个整数 n,请解决下面的问题:
使 f(x)=(不超过 x 且与 x 具有相同位数的正整数的个数)。
求出 f(1)+f(2)+...+f(n),结果对 998244353 取模。
输入格式
一个整数 N。
输出格式
一个整数——上面问题的答案,并对 998244353 取模。
样例输入1
16
样例输出1
73
样例解释:对从 1 到 9 的每个 x,不超过 x 且与 x 具有相同位数的正整数有 1,2,..,x,因此,f(1)=1,f(2)=2,...,f(9)=9。对从 10 到 16 的每个 x,不超过 x 且与 x 具有相同位数的正整数有 10,11,..,x,因此,f(10)=1,f(11)=2,...,f(16)=7。所以答案为 73。
样例输入2
238
样例输出2
13870
样例输入3
999999999999999999
样例输出3
762062362
数据规模
所有数据保证 1≤N<10^18,且 N 是整数。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int p=998244353;
int main()
{std::ios::sync_with_stdio(false);//消除输入输出缓存std::cin.tie(0);//解除cin与cout的绑定,加快速率。ll n,res=0,num=0,ji=10;cin>>n;while(1){if(n>ji-1){ll x=(1+ji-ji/10)%p;ll y=(ji-ji/10)%p;res=(res+(x*y/2)%p)%p;}else{ll x=(1+n-ji/10+1)%p;ll y=(n-ji/10+1)%p;res=(res+(x*y/2)%p)%p;break;}ji*=10;}cout<<res%p<<'\n';return 0;
}
505 新国王游戏
又到了 H 国国庆, 国王再次邀请 n 位大臣来玩有奖游戏。上次国庆被众臣吐槽国王小气后,国王决定今年大方点,改变游戏规则且不再参与游戏,免得被大臣们质疑。首先, 他让每位大臣在左、 右手上面分别写下一个正整数。然后让这 n 位大臣排成一排。排好队后, 所有的大臣都会获得国王奖赏的若千金币, 每位大臣获得的金币数分别是:排在该大臣后面的所有人的左手上的数的乘积乘以他自己右手上的数。国王希望所有大臣获得的金币数之和最多,所以他想请你帮他重新安排一下队伍的顺序。
简而言之,给定 n 对数 ai,bi,找到一种排列顺序,使得 b1×a2∗a3∗…an+b2×a3∗a4∗…an+⋯+bn最大,求最大值,由于答案可能很大,需要对 1000000007 取模
输入格式:
第一行,包含一个整数 n。 第二行到第 n+1 行,包含两个整数 ai,bi
输出格式:
输出一行,表示按某种排序后的 b1×a2∗a3∗…an+b2×a3∗a4∗…an+⋯+bn 的最大值对 1000000007 取模的结果
样例输入
2
1 2
3 4
样例输出
10
说明
只有两种情况:
1.
1 2
3 4
(2∗3)+4=10
2.
3 4
1 2
(4∗1)+2=6
所以答案为 10
数据限制
对于 100%的数据,保证 1≤n≤10^6,1≤ai,bi≤2^30
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int MOD=1000000007;
bool cmp(pair<ll,ll> a,pair<ll,ll> b)
{return b.second+a.second*b.first<a.second+b.second*a.first;
}
int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n;cin>>n;vector<pair<ll,ll>> v(n);for(int i=0;i<n;++i){cin>>v[i].first>>v[i].second;}sort(v.begin(),v.end(),cmp);ll sum=1,res=v[0].second;for(int i=0;i<n;++i){if(i>0) res=(res+(sum*v[i].second)%MOD)%MOD;sum=(sum*v[i].first)%MOD;}cout<<res%MOD<<'\n';return 0;
}
506 完美数
对于给定的数字 a , b ,当整数 n 在十进制下的所有数位都为 a 或 b 时,我们称 n 是“好数”
对于好数 n ,当 n 在十进制下每一位的数字之和也为“好数”时,我们称 n 是一个“完美数”
请你求出有多少 m位数是“完美数”
输入格式
输入一行三个整数 a , b , m , 含义如题面所示 (1≤m≤10^6,1≤a,b≤9)。
输出格式
输出一行一个整数表示完美数的数量 , 由于答案可能很大 , 请你将答案对 109+7 取模
样例输入
5 1 5
样例输出
1
样例解释
只有 11111 满足要求
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int N=1e6+10,p=1e9+7;
ll f[N],s[N];
ll q(int a,int b)
{ll tot=1;while(b){if(b&1) tot=tot*a%p;a=a*(ll)a%p;b>>=1;}return tot;
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);ll a,b,m;cin>>a>>b>>m;f[0]=s[0]=1;for(int i=1;i<N;++i)f[i]=(f[i-1]*i)%p;s[N-1]=q(f[N-1],p-2);for(int i=N-2;i;i--)s[i]=(s[i+1]*(i+1))%p;char c=a+'0',d=b+'0';int x;ll cnt=0;for(int i=0;i<=m;++i){x=m-i;ll num=x*a+i*b;bool flag=1;while(num){if(num%10!=a&&num%10!=b){flag=0;break;}num/=10;}if(!flag) continue;cnt=(cnt+(f[m]*s[i]%p*s[m-i]%p)%p)%p;}cout<<cnt%p<<'\n';return 0;
}
507 Lusir的游戏
Lusir正在玩一个古老的基于 DOS 的游戏。
游戏中有 N+1座建筑——从 0到 N 编号,从左到右排列。编号为 0 的建筑高度为 0 个单位,编号为 i 的建筑高度为 H(i) 个单位。 起初,Lusir 在编号为 0 的建筑处。每一步,它跳到下一个(右边)建筑。假设 Lusir在第 k 个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。
如果 H(k+1)>E,那么 Lusir 就失去 H(k+1)−E 的能量值,否则他将得到 E−H(k+1) 的能量值。
游戏目标是到达第 N 个建筑,在这个过程中能量值不能为负数个单位。
现在的问题是 Lusir 至少以多少能量值开始游戏,才可以保证成功完成游戏?
输入格式
第一行输入整数 N。 第二行是 N 个空格分隔的整数,H(1),H(2),…,H(N) 代表建筑物的高度。
输出格式
输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。
数据范围
1≤N,H(i)≤10^5
输入样例1:
5
3 4 3 2 4
输出样例1:
4
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int n,m=-1;
int b[100010];
int pan(ll k)
{for(int i=1;i<=n;++i){k+=k-b[i];if(k<0) return 0;if(k>=m) return 1;}
}
int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n;for(int i=1;i<=n;++i){cin>>b[i];m=max(m,b[i]);}int l=-1,r=1e6;while(l<r){int mid=(l+r)/2;if(pan(mid)) r=mid;else l=mid+1;}cout<<l<<'\n';return 0;
}
601 BFS练习1
给你一个数字a,每次可以选择下面四种操作中的一种:
- 把数字a加上一。
- 把数字a乘以2。
- 把数字a乘以3。
- 把数字a减去一。
问把这个a变成b最少需要多少步。
你要回答q个询问,b1,b2,…,bq,输出把a变成b1,b2,…,bq的最小步数。
输入格式
第一行两个整数a,q。
接下来一行q个整数b1,…,bq。
输入格式
输出q个数字,分别表示把a变成b1,b2…,bq的最小步数。
样例输入
3 10
1 2 3 4 5 6 7 8 9 10
样例输出
2 1 0 1 2 1 2 2 1 2
数据规模
对于所有数据,保证1≤a,q,bi≤10^5。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int f[510000];
int num,n;
int a[510000];
int main()
{ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>num;cin>>n;vector<int> v(n);for(int i=0;i<n;++i){cin>>v[i];a[v[i]]=-1;}queue <int> q;q.push(num);int res=0;while(!q.empty()&&n){int l=q.size();for(int i=0;i<l;++i){int ans=q.front();q.pop();if(a[ans]==-1){a[ans]=res;n--;}//四种if(ans*3<100050&&f[ans*3]==0){q.push(ans*3);f[ans*3]=1;}if(ans*2<100050&&f[ans*2]==0){q.push(ans*2);f[ans*2]=1;}if(ans-1>0&&f[ans-1]==0){q.push(ans-1);f[ans-1]=1;}if(ans+1<100050&&f[ans+1]==0){q.push(ans+1);f[ans+1]=1;}}++res;}for(auto i:v){cout<<a[i]<<" ";}return 0;
}
602 01序列2
又是大家最喜欢的01序列问题了呢
这次的问题非常的简单,cc觉得一个01序列中两个1之间至少要有k个0,现在他要构造出一个长度为n的01序列,请问他有多少种不同的构造方法
这个数字可能会非常大,请你对1e9+7取模
输入格式
一行,给出两个整数n,k
输出格式
一个整数,代表不同的构造方法数
数据范围
1≤n≤1e6
0≤k<n
样例输入
4 2
样例输出
6
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
const int p=1e9+7;
ll f[1000010];//到第i位是1,后全是0的最大构造方法
ll sum[1000010];//到i的情况总和
int main()
{std::ios::sync_with_stdio(false);//消除输入输出缓存std::cin.tie(0);//解除cin与cout的绑定,加快速率。int n,k;cin>>n>>k;for(int i=1;i<=n;++i){f[i]=1;sum[i]=sum[i-1]+1;}//初始这位是1其他全是0的情况有1种 for(int i=k+1;i<=n;++i){f[i]+=sum[i-k-1];//i是1,那么i-k到i-1一定是0,只需加上之前的情况 f[i]%=p;sum[i]=(sum[i-1]+f[i])%p;//第i位是0时,情况数为sum[i-1]//第i位是1时,情况数为f[i]}cout<<(sum[n]+1)%p<<'\n';return 0;
}
603 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由 1 组成的数字,比如 1、11、111、1111、11111 等。传说任何一个光棍都能被一个不以 5 结尾的奇数整除。比如, 111111 就可以被 13 整除。 现在,你的程序要读入一个整数 x ,这个整数一定是奇数并且不以 5 结尾。然后,经过计算,输出两个数字:第一个数字 s,表示x 乘以 s 是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除 x为止。但难点在于,s 可能是个非常大的数 —— 比如,程序输入 31 ,那么就输出 3584229390681和 15 ,因为 31 乘以 3584229390681 的结果是 111111111111111 ,一共 15 个 11。
输入格式
输入在一行中给出一个不以 55 结尾的正奇数 x(x<1000)。
输出格式
在一行中输出相应的最小的 s 和 n,其间以 1 个空格分隔。
样例输入
31
样例输出
3584229390681 15
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{std::ios::sync_with_stdio(false);//消除输入输出缓存std::cin.tie(0);//解除cin与cout的绑定,加快速率。int a;cin>>a;int cnt=1,d=1;while(d<a){d=d*10+1;++cnt;}while(1){if(d/a==0){d=d*10+1;++cnt;}cout<<d/a;d=d%a;if(d==0) break;}cout<<" "<<cnt;return 0;
}
代码源Div2 501-603相关推荐
- E: 您必须在 sources.list 中指定代码源(deb-src) URI 解决办法
PS:这篇是自己的笔记,用来自己查阅的,所以不是很通俗 今天遇到了如下问题: Q: "正在读取软件包列表--完成 E:您必须在 source.list中指定代码源(deb-src)URI&q ...
- 【8.6】代码源 - 【前缀集】【矩阵游戏】【谁才是最终赢家?】【放置多米诺骨牌】
#930. 前缀集 题意:给定两个长为 n ( 1 ≤ n ≤ 5 × 1 0 5 ) n(1\leq n\leq 5\times 10^5) n(1≤n≤5×105) 的序列 a i , b i a ...
- Python量化代码源码160个,聚宽直接使用,已全部整理
Python量化代码源码160个,聚宽直接使用,已全部整理.包含截面策略,择时策略,神经网络,机器学习,随机森林 id=659330254988&
- 【8.8】代码源 - 【不降子数组游戏】【最长上升子序列计数(Bonus)】【子串(数据加强版)】
#886. 不降子数组游戏 题意: 题解:(分块/三分) 代码源每日一题Div1 不降子数组游戏 思路:首先,先手选了一个点,后手必定要选 L,RL,RL,R 其中的一个,这样才能使分数最大.那么把我 ...
- Outer space invaders(代码源div.1 P5)
随便说点 终于算是把代码源上周div.1div.1div.1的题目写完了,虽然后面两题有很严重的作弊嫌疑(看了蜗老师的代码),但也算是懂大致的原理.不得不感慨大佬们的代码居然能如此简练,以至于我抄起来 ...
- 雷达信号处理程序源码 python 需达围像识别 雷达系统仿真代码源码 matlab SAR 雷达系统仿真程序集合 雷达压制干扰matlab程序 线性调联(IFM)脉冲压缩雷达伤真
雷达信号处理程序源码 雷达系统仿真代码源码 matlab SAR 1.MAITOFPR 探地雷达数据处理MMITLAB程序 2.python 需达围像识别 3.SAR团达回波仿真matlab 4.SA ...
- 图书馆管理系统代码源码(php+css+js+mysql) 完整的代码源码
图书馆管理系统代码源码(php+css+js+mysql) 完整的代码源码,系统使用B/S架构. 优化过的界面,拥有管理员和普通用户,普通用户可注册登录,管理员可登录,功能齐全. 管理员可管理普通用户 ...
- 会议室预定系统代码源码(php+css+js+mysql) 完整的代码源码
会议室预定系统代码源码(php+css+js+mysql) 完整的代码源码,系统使用B/S架构. 优化过的界面,由管理员进行预定会议室操作. 推荐使用phpstudy+ navicat搭建和管理项目! ...
- 507 Lusir的游戏 二分 数论 [代码源][namomo spring camp]每日一题div2
可以二分硬搞一下,注意check里面res容易炸,加特判 除此以外还可以纯数学搞,思路写这里 假设我们到达了第i个点 那么 Ei=2∗Ei−1−H(i)=2iE0−∑j=1i2i−jH(j)Ei> ...
最新文章
- AI一分钟 | 万达网科裁员95%高达5000余人,被爆下一步将转型AI; 英伟达放话了:研究人员放心用,不更新驱动就没啥事儿
- checksum linux 命令_linux常用命令总结
- [BZOJ4349]最小树形图
- 广州python平均薪资_爬取广州的python和Java薪资,为什么Python 高于Java(有代码)...
- WebService学习总结(4)——第三方webService服务调用
- 自动挡轿车等红灯时,是挂D挡踩刹车好还是挂N挡好呢?
- C#实现HTTP下载文件的方法
- gaussian09使用教程linux,Gaussian-09-GaussView5.0使用教程.ppt
- 打印机扫描显示服务器拒绝访问,怎么解决打印机拒绝访问问题?打印机拒绝访问的解决方法...
- 中央银行会计核算数据集中系统(ACS系统)
- QT 科学计算器与谷歌拼音输入法实现
- H5+CSS Low poly风格动效圣诞树分享
- 操作系统进程同步作业题
- Android关闭屏幕,但不休眠
- ElasticSearch painless脚本实现自定义打分排序
- 2021年中国压力-容积回路系统市场趋势报告、技术动态创新及2027年市场预测
- 渠道二维码的基础玩法总结
- python文件拓展名是_python文件扩展名是什么
- Excel----考勤表制作自动更新日期
- 华为 进入和退出Fastboot、eRecovery和Recovery升级模式