首页
关于
Search
1
python初学示例
548 阅读
2
欢迎使用 Typecho
510 阅读
3
晒谷子
488 阅读
4
痛
468 阅读
5
蓝桥杯2022年第十三届省赛真题-X进制减法
463 阅读
默认分类
登录
Search
Typecho
累计撰写
35
篇文章
累计收到
10
条评论
首页
栏目
默认分类
页面
关于
搜索到
35
篇与
默认分类
的结果
2023-02-09
关于单个flask接口的微信request合法域名认证(无需借助任何集成环境)
引言我们经常用flask开发一个简单的接口又想在微信公众号上能够调用这是微信公众号添加请求地址页面 但是我们用单个flask获取的网址为http://ip:端口 这与微信公众号所要求的不符合方法我们可以将域名以A记录解析到服务器再在腾讯云申请一个免费的ssl证书 腾讯云ssl申请链接 将申请的该证书下载下来(nginx)获取的压缩包中我们有如下文件 我们只需要解压出后缀为.csr .key的配置文件即可在服务器上运行 pip install pyOpenSSL安装完成后# 配置ssl证书文件文件 ssl_keys = ('server.crt', 'server.key') # 修改启动参数,增加 ssl_context=ssl_keys 即可 app.run(debug='True', port='8080', host='0.0.0.0', ssl_context=ssl_keys)按这样的代码改即可最后我们得到的地址是https://domain.com:8080;这样就可以完美填入微信公众号request合法域名了解析的时候不需要管哪个端口,只需要解析到服务器地址即可
2023年02月09日
304 阅读
0 评论
0 点赞
2023-02-07
蓝桥杯2022年第十三届省赛真题-X进制减法
题目进制规定了数字在数位上逢几进一。X 进制是一种很神奇的进制,因为其每一数位的进制并不固定!例如说某种 X 进制数,最低数位为二进制,第二数位为十进制,第三数位为八进制,则 X 进制数 321 转换为十进制数为 65。现在有两个 X 进制表示的整数 A 和 B,但是其具体每一数位的进制还不确定,只知道 A 和 B 是同一进制规则,且每一数位最高为 N 进制,最低为二进制。请你算出 A − B 的结果最小可能是多少。请注意,你需要保证 A 和 B 在 X 进制下都是合法的,即每一数位上的数字要小于其进制。 输入格式第一行一个正整数 N,含义如题面所述。第二行一个正整数 Ma,表示 X 进制数 A 的位数。第三行 Ma 个用空格分开的整数,表示 X 进制数 A 按从高位到低位顺序各个数位上的数字在十进制下的表示。第四行一个正整数 Mb,表示 X 进制数 B 的位数。第五行 Mb 个用空格分开的整数,表示 X 进制数 B 按从高位到低位顺序各个数位上的数字在十进制下的表示。请注意,输入中的所有数字都是十进制的。输出格式输出一行一个整数,表示 X 进制数 A − B 的结果的最小可能值转换为十进制后再模 1000000007 的结果。 样例输入11310 4 031 2 0样例输出94提示当进制为:最低位 2 进制,第二数位 5 进制,第三数位 11 进制时,减法得到的差最小。此时 A 在十进制下是 108,B 在十进制下是 14,差值是 94。对于 30% 的数据,N ≤ 10; Ma, Mb ≤ 8. 对于 100% 的数据,2 ≤ N ≤ 1000; 1 ≤ Ma, Mb ≤ 100000; A ≥ B. 分析最后的数据肯定很大,我们sum采用long long;输入的时候采用从大索引到小索引,数字从高位到低位,因为需要防止位数不对应x进制转换成十进制的例子321 题中给出分别为 8 10 2 进制310*2+22+1本题就只需要把高位每一位的差值控制到最小;根据提示,我们可以找到规律,就是每一位的进制数就是max(a[i],b[i])+1;特别注意,还存在0,1这两种情况,我们采用二进制,所以得到的表达式是max(max(a[i]+1,b[i]+1),2);设置数组的时候放到static中,这样直接初始化的时候全部元素都是0,如果在int main中就需要设置memset(a,0,sizeof(a));最主要的算法如下for(int i=ma;i>1;i--) { sum=(sum+a[i]+b[i])*max(max(a[i-1]+1,b[i-1]+1),2)%1000000007; }我们拿出示例10 4 01 2 0带入上面的算法中我们可以得到sum=((0+10-1)5+4-2)2简单化简可化为sum=9*5*2+2*2这里有个需要注意的,我们只循环了ma-1次,还有一个a[1],b[1]没有用真正的sum还需要加上(a[1]-b[1]);代码#include<iostream> #include<cmath> using namespace std; const int N=100010; int a[N],b[N]; int main(){ int ma,mb,n; cin>>n; cin>>ma; for(int i=ma;i>0;i--) cin>>a[i]; cin>>mb; for(int i=mb;i>0;i--) cin>>b[i]; long long sum=0; for(int i=ma;i>1;i--) sum=(sum+a[i]-b[i])*max(max(a[i-1]+1,b[i-1]+1),2)%1000000007; sum+=a[1]-b[1]%1000000007; cout<<sum<<endl; }有问题,请斧正
2023年02月07日
463 阅读
0 评论
0 点赞
2023-02-03
蓝桥杯大赛软件类省赛C/C++大学B组-修剪灌木
题目题目描述爱丽丝要完成一项修剪灌木的工作。有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。输入格式一个正整数 N ,含义如题面所述。输出格式输出 N 行,每行一个整数,第行表示从左到右第 i 棵树最高能长到多高。样例输入3样例输出424提示对于 30% 的数据,N ≤ 10. 对于 100% 的数据,1 < N ≤ 10000.分析000111011122103214210321301412012得出最高的值取决于左右两边的长度,取最长的再乘2;即第一棵树=(n-1)*2则第i棵树max(i-1,n-i);//i-1得出左侧有多少,n-i得右侧数量,取max对所取得max*2即可得出答案#include<iostream> #include<cmath> using namespace std; int main() { int N; cin>>N; for(int i=1;i<=N;i++) { cout<<2*max(i-1,N-i)<<endl; } }
2023年02月03日
227 阅读
2 评论
0 点赞
2023-02-03
蓝桥杯大赛软件类省赛C/C++大学A组-求和
题目题目描述给定 n 个整数 a1, a2, · · · , an ,求它们两两相乘再相加的和,即 S = a1 · a2 + a1 · a3 + · · · + a1 · an + a2 · a3 + · · · + an-2 · an-1 + an-2 · an + an-1 · an.输入格式输入的第一行包含一个整数 n 。 第二行包含 n 个整数 a1, a2, · · · an。输出格式输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。样例输入41 3 6 9样例输出117提示对于 30% 的数据,1 ≤ n ≤ 1000,1 ≤ ai ≤ 100。对于所有评测用例,1 ≤ n ≤ 200000,1 ≤ ai ≤ 1000。分析数据范围直接采用long long 吧``const int N=200010long long a[N],b[N]``数组 S = a1 · a2 + a1 · a3 + · · · + a1 · an + a2 · a3 + · · · + an-2 · an-1 + an-2 · an + an-1 · an本题采用提取公因式和前缀和;我们提取公因式后可以得到S=a1(a2+a3+...+an)+a2(a3+...an)+....an-1*an;我们将数据读取到a数组中重点将b数组从n开始循环到1;``b[i]=a[i];b[i]+=b[i+1];``我们此时就得到了a数组的前缀和得到的数据b[i+1]直接乘上a[i]再累加即可代码#include<iostream> using namespace std; const int N=200010; long long a[N],b[N]; int main(){ int n; long long sum=0; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=n;i>=1;i--) b[i]=a[i],b[i]+=b[i+1]; for(int i=1;i<=n;i++) { sum+=(a[i]*b[i+1]); } cout<<sum<<endl; }
2023年02月03日
177 阅读
0 评论
0 点赞
2023-02-03
2022蓝桥杯(c/c++ B组)-刷题统计
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?输入格式输入一行包含三个整数 a, b 和 n.输出格式输出一个整数代表天数。样例输入10 20 99样例输出8提示对于 50% 的评测用例,1 ≤ a, b, n ≤ 106 . 对于 100% 的评测用例,1 ≤ a, b, n ≤ 1018 分析 我们可以确定一个星期为7天,且五天做的题数为5*a,周末为2*b输入为一个n,用sum=n/(5*a+2*b)得出用了多少周,剩余题量为count=n-sum*(sum*5*a+sum*2*b);sum=sum*7所得天数剩余题量是在一个星期内肯定能完成我们可以用两个for循环解决for(int i=0;i<5&&count>0;i++) sum+=1,count-=a;for(int i=0;i<2&&count>0;i++) sum+=1,count-=b;最后输出sum即可 对于数据范围要用long long 不然第71个数据直接报错 代码:#include<iostream> using namespace std; int main() { long long a,b,n,count; long long sum=0; cin>>a>>b>>n; sum=n/(5*a+2*b); count = n-sum*(5*a+2*b); sum=sum*7; for(int i=0;i<5&&count>0;i++) sum+=1,count-=a; for(int i=0;i<2&&count>0;i++) sum+=1,count-=b; cout<<sum<<endl; }有错误请指出,蟹蟹;
2023年02月03日
142 阅读
0 评论
0 点赞
1
2
3
...
7