问题 A: 幸运数字

思路:直接把N当成字符串读入,循环判断是否有一位是7就可以了。

#include <bits/stdc++.h>//#include<iostream>//#include<string.h>//#include<math.h//#include<algorithm>
#define ll long long
#define db double
#define pii pair<int,int>
#define cf int _;cin>>_;while(_--)
#define de cout<<"---"<<endl;
#define mem(x,v) memset(x,v,sizeof(x))
#define L(x) x&(-x)
#define pb push_back//emplace_back//priority_queue <int,vector<int>,greater<int> > q;
#define INF 0x3f3f3f3f
#define endl '\n'
//function<void(int)> dfs = [&](int u);
//#define x first
//#define y second
using namespace std;
const int mod=998244353;
int n;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);string a;bool ok=0;cin>>a;for(auto i:a){if(i=='7')ok=1;}cout<<(ok?"Yes":"No")<<endl;
}

问题 B: 幸运数字2

思路:直接暴力从1到N判断是不是幸运数字,如果是答案就加上它。

#include <bits/stdc++.h>//#include<iostream>//#include<string.h>//#include<math.h//#include<algorithm>
#define ll long long
#define db double
#define pii pair<int,int>
#define cf int _;cin>>_;while(_--)
#define de cout<<"---"<<endl;
#define mem(x,v) memset(x,v,sizeof(x))
#define L(x) x&(-x)
#define pb push_back//emplace_back//priority_queue <int,vector<int>,greater<int> > q;
#define INF 0x3f3f3f3f
#define endl '\n'
//function<void(int)> dfs = [&](int u);
//#define x first
//#define y second
using namespace std;
const int mod=998244353;
int n;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;ll res=0;for(int i=1;i<=n;i++){if(i%3&&i%5)res+=i;}cout<<res<<endl;
}

问题 C: gcd问题

思路:直接K三方+辗转相除法暴力求解就行。

#include <bits/stdc++.h>//#include<iostream>//#include<string.h>//#include<math.h//#include<algorithm>
#define ll long long
#define db double
#define pii pair<int,int>
#define cf int _;cin>>_;while(_--)
#define de cout<<"---"<<endl;
#define mem(x,v) memset(x,v,sizeof(x))
#define L(x) x&(-x)
#define pb push_back//emplace_back//priority_queue <int,vector<int>,greater<int> > q;
#define INF 0x3f3f3f3f
#define endl '\n'
//function<void(int)> dfs = [&](int u);
//#define x first
//#define y second
using namespace std;
const int mod=998244353;
int n;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;ll res=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int t=gcd(i,j);for(int k=1;k<=n;k++){res+=gcd(t,k);}}}cout<<res<<endl;
}

问题 D: RGB

思路:先求出满足条件1的所有答案,就是R的个数×G的个数×B的个数,然后枚举i和j,得出不满足条件2的k,然后判断i,j,k是否满足条件1,如果满足则把它从答案中减去。

#include <bits/stdc++.h>//#include<iostream>//#include<string.h>//#include<math.h//#include<algorithm>
#define ll long long
#define db double
#define pii pair<int,int>
#define cf int _;cin>>_;while(_--)
#define de cout<<"---"<<endl;
#define mem(x,v) memset(x,v,sizeof(x))
#define L(x) x&(-x)
#define pb push_back//emplace_back//priority_queue <int,vector<int>,greater<int> > q;
#define INF 0x3f3f3f3f
#define endl '\n'
//function<void(int)> dfs = [&](int u);
//#define x first
//#define y second
using namespace std;
const int mod=998244353;
int n;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;string a;cin>>a;ll r=0,g=0,b=0;for(int i=0;i<n;i++){if(a[i]=='R')r++;else if(a[i]=='G')g++;else b++;}ll res=r*b*g;for(int i=0;i<n;i++){for(int j=1;;j++){int ii=i+j,jj=ii+j;if(jj>=n)break;if(a[i]!=a[ii]&&a[i]!=a[jj]&&a[ii]!=a[jj])res--;}}cout<<res<<endl;
}

问题 E: gcd问题2

思路:设f[i]等于gcd(a1,a2,...,an)=i的a数组的个数,那么k中可以被i整除的数的个数有k/i,但是f[i]不等于k/i的n次方,因为其中还包含gcd(a1,a2,...,an)=i的倍数的a数组,所以要减去f[j](j=i的倍数,最后f[i]*i求和即可得到答案。

#include <bits/stdc++.h>//#include<iostream>//#include<string.h>//#include<math.h//#include<algorithm>
#define ll long long
#define db double
#define pii pair<int,int>
#define cf int _;cin>>_;while(_--)
#define de cout<<"---"<<endl;
#define mem(x,v) memset(x,v,sizeof(x))
#define L(x) x&(-x)
#define pb push_back//emplace_back//priority_queue <int,vector<int>,greater<int> > q;
#define INF 0x3f3f3f3f
#define endl '\n'
//function<void(int)> dfs = [&](int u);
//#define x first
//#define y second
using namespace std;
const int mod=1e9+7;
int n,k;
ll f[100005];
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>k;for(int i=k;i>=1;i--){f[i]=powmod(k/i,n);for(int j=i*2;j<=k;j+=i){f[i]-=f[j];if(f[i]<0)f[i]+=mod;}}ll res=0;for(int i=1;i<=k;i++){res+=i*f[i]%mod;res%=mod;}cout<<res<<endl;
}

问题 F: 付哥拿糖果

思路:设f[i][j][k]为从i开始跳跳到j其中多跳了k个的最大答案(默认每次取相中间差一个的糖果,如果中间差两个那么多跳了1个),那么当n是奇数时答案就取dp[1][n][3],dp[1][n-1][2],dp[1][n-2][1],dp[2][n][2],dp[2][n-1][1],dp[3][n][1]中的最大值,是偶数时答案就取dp[1][n][2],dp[1][n-1][1],dp[2][n][1]中的最大值。

#include <bits/stdc++.h>//#include<iostream>//#include<string.h>//#include<math.h//#include<algorithm>
#define ll long long
#define db double
#define pii pair<int,int>
#define cf int _;cin>>_;while(_--)
#define de cout<<"---"<<endl;
#define mem(x,v) memset(x,v,sizeof(x))
#define L(x) x&(-x)
#define pb push_back//emplace_back//priority_queue <int,vector<int>,greater<int> > q;
#define INF 0x3f3f3f3f
#define endl '\n'
//function<void(int)> dfs = [&](int u);
//#define x first
//#define y second
using namespace std;
const int mod=1e9+7;
int n,k;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
ll dp[5][100050][5];
int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n;vector<ll>a(n+10,0);for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=3;i++){for(int j=1;j<=n;j++){for(int k=1;k<=3;k++){dp[i][j][k]=-1e18;}}}dp[1][1][1]=a[1];dp[2][2][1]=a[2],dp[3][3][1]=a[3];for(int i=1;i<=n;i++){for(int j=1;j<=3;j++){dp[j][i+2][1]=max(dp[j][i+2][1],dp[j][i][1]+a[i+2]);dp[j][i+2][2]=max(dp[j][i+2][2],dp[j][i][2]+a[i+2]);dp[j][i+3][2]=max(dp[j][i+3][2],dp[j][i][1]+a[i+3]);dp[j][i+2][3]=max(dp[j][i+2][3],dp[j][i][3]+a[i+2]);dp[j][i+3][3]=max(dp[j][i+3][3],dp[j][i][2]+a[i+3]);dp[j][i+4][3]=max(dp[j][i+4][3],dp[j][i][1]+a[i+4]);}}if(n&1){ll res=-1e18;res=max(res,dp[1][n][3]);res=max(res,dp[1][n-1][2]);res=max(res,dp[1][n-2][1]);res=max(res,dp[2][n][2]);res=max(res,dp[2][n-1][1]);res=max(res,dp[3][n][1]);cout<<res<<endl;}else {ll res=-1e18;res=max(res,dp[1][n][2]);res=max(res,dp[1][n-1][1]);res=max(res,dp[2][n][1]);cout<<res<<endl;}
}

北京化工大学 2022-2023-1 ACM集训队每周程序设计竞赛(7)题解相关推荐

  1. 2021-2022-1 ACM集训队每周程序设计竞赛(5) - 问题 B: 跳蛙 - 题解

    传送门 分割 题目描述 输入描述 数据范围: 输出描述 样例一 输入 输出 样例二 输入 输出 提示 题目分析 AC代码 分割 CMP 跳蛙 剪切 数学? 数学! 逃离 时间限制:1秒 空间限制:12 ...

  2. BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛(10)题解

    Bob和Alice(1) 思路: 模拟即可模拟即可模拟即可 时间复杂度:O1O1O1 #include <bits/stdc++.h> #define fer(i,a,b) for(int ...

  3. 2021-2022-1 ACM集训队每周程序设计竞赛(5) - 问题 C: 剪切 - 题解

    传送门 分割 题目描述 输入描述 输出描述 样例一 输入 输出 样例二 输入 输出 提示 题目分析 AC代码 分割 CMP 跳蛙 剪切 数学? 数学! 逃离 时间限制:1秒 空间限制:128M 题目描 ...

  4. 北京化工大学2022-2023-1 ACM集训队每周程序设计竞赛(8)题解

    文章目录 问题 A: 鬼抓人 问题 B: 坠落之前 问题 C: 数据结构:树的子结点计数 问题 D: 糖果合并 问题 E: 幼儿园排座 问题 F: 简单路径计数 (((糖豆人小专题( •̀ ω •́ ...

  5. 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 D: 点外卖 - 题解

    题意: 有 nnn 道菜,mmm 张券,券的作用是将任意一道菜的价格变为原来的一半(下取整),且允许叠加使用,问最少花费多少钱. 思路: 每一张券最优的使用方法一定是对当前价格最高的菜使用,那么这道题 ...

  6. 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 E: 祖玛的复仇 - 题解

    题意: 在长度为 n n n 的原字符串 S S S 找到中出现两次或两次以上的.相互之间没有重叠的连续子字符串的最大长度. 思路: 这道题的解法其实挺多的,大家可以之后多想下,我这里就只写一个最容易 ...

  7. 2021-2022-2 ACM集训队每周程序设计竞赛(1) - 问题 A: 排火车 - 题解

    题意: S u n n y Sunny Sunny之后接 C l o u d y Cloudy Cloudy, C l o u d y Cloudy Cloudy之后接 R a i n y Rainy ...

  8. 2021-2022-2 ACM集训队每周程序设计竞赛(10) - 问题 A: 还原撕碎的字条,哄笑生气的毛毛 - 题解

    传送门 还原撕碎的字条,哄笑生气的毛毛 题目描述 输入描述 输出描述 样例一 输入 输出 样例二 输入 输出 样例三 输入 输出 题目分析 AC代码 还原撕碎的字条,哄笑生气的毛毛 还原撕碎的字条,哄 ...

  9. 北京化工大学2022-2023-1 ACM集训队每周程序设计竞赛(11)题解

    文章目录 问题 A: 起名废柴 问题 B: 可视消息 问题 C: 虫洞旅行 问题 D: 整数化简分析 问题 E: 向量选取 问题 F: 勤劳的扫地机器人 问题 A: 起名废柴 根据题意,判断字符串 T ...

最新文章

  1. 如何根据原理图画封装_生物水处理专用消泡剂是如何根据生物水处理工艺原理进行消泡的?...
  2. python 动态编译代码_使用PyQt(Python+Qt)+动态编译36行代码实现的计算器
  3. R语言笔记3:提取R对象的子集
  4. 2020年SAP项目艰辛曲折的开工历程 II
  5. 结构体命名中的尾标ST是什么意思?(struct)
  6. 陶陶的兔二,建好啦!
  7. yui3 html属性,YUI Rich Editor + invalidHTML + style
  8. 07MySQL综合应用
  9. SQL 之后,GQL 成为 ISO/IEC 国际标准数据库语言项目
  10. 【html+css3】在一张jpg图片上,显示多张透明的png图片
  11. Linux进程地址空间布局
  12. 洗车香波行业调研报告 - 市场现状分析与发展前景预测
  13. 华尔街日报:雅虎站在移动互联网时代悬崖边
  14. 滴滴曹乐:如何成为技术大牛?
  15. mysql查询一天内,一周,一个月内的消费记录
  16. 关于keil编译显示Flash Download failed -Could not load file xxxx.axf
  17. 迅睿CMS 全站生成静态
  18. 数据质量测试:测试数据有效性和准确性的方法
  19. 乐吾乐2D可视化智慧光伏能源赋能方案
  20. spring boot 资料整合

热门文章

  1. 【已解决】linux ssh 远程连接服务器,出现登陆慢、打字卡顿输入卡顿解决方案
  2. 椭圆曲线的整数点加法的计算问题
  3. 磨金石教育摄影技能干货分享|曾毅——尘封的故土,难忘的乡愁
  4. 2. 星际争霸之php面向对象(二)
  5. 私域流量运营的四个模型
  6. 2021-04-29 鹅厂等我!毕竟我充了辣么多QQ币~
  7. 今年5号台风在福建登陆
  8. Web3中文|GPT-4超越GPT-3.5的五大看点
  9. Docker 使用国内镜像仓库
  10. 自己拍的视频怎么剪辑配音乐 剪辑视频音乐和视频对不上怎么办