目录

1.特殊正方形:

2.走楼梯2:

3.走路:

4.简单分数统计:

5.Alice的德州扑克:

6.订单编号:

7.饿饿 饭饭:

8.任务分配:


1.特殊正方形:

题目
输入n,输出n行n列的由+和.组成的正方形,其中最外面一圈全是+,第二圈全是.,…,对于第i圈,如果i是奇数,那么全是+,否则全是.。

输入格式
一行,一个整数n。

输出格式
n行,为满足题目要求的正方形。注意不要有行末空格。

样例输入
10
样例输出

++++++++++
+........+
+.++++++.+
+.+....+.+
+.+.++.+.+
+.+.++.+.+
+.+....+.+
+.++++++.+
+........+
++++++++++
数据范围
对于100%的数据,保证2≤n≤100。

本题直接按照题目中的规律进行赋值,将二维字符组赋值为相应的字符即可。

#include<iostream>
using namespace std;int main(){int n;char a[1005][1005] = {'a'};cin>>n;int t= n;char c;while(n>=t/2){if((t-n)%2 == 0) c = '+';else c = '.';for(int i=t-n;i<n;i++){a[t-n][i] = c;a[n-1][i] = c;}for(int i=t-n;i<n;i++){a[i][t-n] = c;a[i][n-1] = c;}
//      cout<<a[9][1]<<endl<<endl; n--;}
//  cout<<"2"<<endl;for(int i=0;i<t;i++){
//      cout << "3"<<endl;for(int j =0;j<t;j++){
//          cout<<"11";cout<<a[i][j];}cout<<endl;}
}

2.走楼梯2:

楼梯有 n 阶,上楼可以一步上一阶,也可以一步上二阶。

但你不能连续三步都走两阶,计算走到第n阶共有多少种不同的走法。

输入格式

一行,一个数字,表示n

输出格式

输出走楼梯的方式总数。

本题是典型dp题,但是由于有限制条件:不能连续上3次两级台阶,所以需要对此进行标记约束,通过走2步的次数进行dp

#include<iostream>
using namespace std;typedef long long ll;const int N = 1e6+9;
ll dp[55][5];
int main()
{int n;cin>>n;dp[1][0] = 1;dp[1][1] = 0;dp[1][2] = 0;dp[2][0] = 1;dp[2][1] = 1;dp[2][2] = 0;for(int i = 3;i<=n;i++){dp[i][0] = dp[i-1][0]+dp[i-1][1]+dp[i-1][2];dp[i][1] = dp[i-2][0];dp[i][2] = dp[i-2][1];}cout<<dp[n][0]+dp[n][1]+dp[n][2]<<"\n";
}

3.走路:

有一条很长的数轴,一开始你在00的位置。接下来你要走n步,第i步你可以往右走ai或者bi。

问n步之后,00到m的每个位置,能不能走到?

输入格式

第一行,两个整数n,m。

接下来n行,每行两个整数ai,b。

输出格式

一行,一共m+1个数,每个数都是01表示能否走到,数字之间不用空格隔开。

本题类似01背包问题,直接从后往前确定是否能走到即可

#include<iostream>
#include<math.h>
using namespace std;const int N = 10001000;int n, m;
bool st[110][N];int main()
{cin >> n >> m;st[0][0] = true;for ( int i = 1; i <= n; i ++ ){int a, b;cin >> a >> b;if (a > b) swap(a, b);for ( int j = m; j >= a; j -- ){st[i][j] |= st[i - 1][j - a];if (j >= b) st[i][j] |= st[i - 1][j - b];}}for ( int i = 0; i <= m; i ++ ){if (st[n][i]) cout << "1";else cout << "0";;;}return 0;
}

4.简单分数统计:

NN 个好朋友在codeforces上参加一场包含 MM 个题目的比赛, 比赛期间codeforces网站一共有 kk 次提交。

已知每个题目的分数,

但是由于他们只能查到在比赛期间codeforces总共的提交记录(其他用户提交的其他题目记录也包含在内, 即存在不属于该场比赛的题目),

所以想请你编写一个程序算出他们每个人的分数。

输入格式

第一行三个整数 NN, MM, KK 分别表示好朋友的个数, 题目的个数, 和提交的总次数(其中0<N,M,K<=2000<N,M,K<=200)。

接下来 NN 行 第 ii 行输入为第 ii 个人的id,

接下来 MM 行 第 jj 行输入为第 jj 个题目的名称和分数,

接下来 KK 行 第 kk 行输入为第 kk 次提交的提交者id, 题目名称和结果("WA" 或 "AC", 如果"AC"代表通过这个题目, 提交者获得对应分数)。

注: 题目名称和id均为仅包含英文字母和数字的字符串, 题目分数为小于等于 1e61e6 的正整数. 每一行的多个输入之间用空格隔开。

所有输入的字符串长度 lengthlength 满足 0<length≤5000<length≤500。

所有用户id和题目名称不存在重名, 用户AC了某个题之后之后不会再重复提交该题, 好朋友们只会提交属于比赛的题目。

输出格式

输出 NN 行, 第 ii 行输出第 ii 个人的名字和对应分数 (名字和分数用空格隔开)。

简单使用set查找得分即可。

#include<iostream>
#include<map>
using namespace std;const int N = 200010;
typedef long long ll;int main(){map<string , ll> m;ll n,M,k;cin>>n>>M>>k;string s[1000];for(int i=0;i<n;i++){cin>>s[i];m[s[i]] = 0;}for(int i=0;i<M;i++){string ss;ll aa;cin>>ss>>aa;m[ss] = aa;}for(int i=0;i<k;i++){string a1,a3,a2;cin>>a1>>a2>>a3;if(a3 == "AC") m[a1] += m[a2]; }for(int i=0;i<n;i++){cout<<s[i]<<" "<<m[s[i]]<<endl;;}return 0;
} 

5.Alice的德州扑克:

德州扑克是目前世界上最流行的扑克游戏,全世界有众多相关的比赛,例如是 WSOP,WPT,EPT等,也让这款游戏的玩法变得层出不穷,丰富多变。 不要被简单的游戏规则而误导,复杂多变的比赛状况,让这款游戏在高水平的竞技中会变得非常复杂,这也让人们为德州扑克给出了这样一句评价 ”用一刻就能学会,但要用一生才能掌握” 。
现在我们并不在乎游戏规则是什么,因为 Alice 是一个德州扑克高手,他对于德州扑克的规则烂熟于心,不过他每次都记不得牌型的大小关系,他知道你是一个编程高手,所以他想让你帮他写一个程序:输入五张牌的大小和花色,输出这五张牌能组成的最大牌型.你能帮帮他吗?

为了降低你的编程难度,我们规定:

输入的牌都是来源于同一副扑克牌

输入的牌的点数都是非递减的

所有花色没有大小之分

下面给出各牌型,(从大到小)

皇家同花顺(ROYAL FLUSH):五张顺连的牌(点数连续单调递增),且最大的一张牌是A(Ace),并且五张牌的花色相同

同花顺(STRAIGHT FLUSH):五张顺连的牌(点数连续单调递增),不规定最大的一张牌是A(Ace),并且五张牌的花色相同

四条(FOUR OF A KIND):至少四张牌的点数相同

葫芦(FULL HOUSE):至少三张牌的点数相同,并且除此之外还有两张牌的点数相同

同花(FLUSH):五张牌的花色都相同

顺子(STRAIGHT):五张顺连的牌(点数连续单调递增),不要求五张牌的花色相同

特别注意:由于 Alice 是个谨慎的人,所以比 三条(THREE OF A KIND) (包括三条) 小的牌型 Alice 不在乎他们的大小关系,你只需要告诉 Alice 弃牌就行

输入格式
输入两行,每行五个数字,第一行的第 ii 个字符表示第 ii 张扑克的点数,

第二行的第 ii 个数字表示第 ii 张扑克花色。(保证输入的牌的点数是非递减的,且所有输入均合法)。

点数和对应输入的数字:

2−102−10 对应 2 - 10

J(Jack)J(Jack) 对应 11

Q(Queen)Q(Queen) 对应 12

K(King)K(King) 对应 13

A(Ace)A(Ace) 对应 14

花色和对应输入的数字:

黑桃 (Spades) 对应 1

方片 (Diamonds) 对应 2

红桃 (Hearts) 对应 3

梅花 (Clubs) 对应 4

输出格式
输出这五张牌能组成的最大牌型。

如果最大是皇家同花顺输出 "ROYAL FLUSH"

如果最大是同花顺输出 "STRAIGHT FLUSH"

如果最大是四条输出 "FOUR OF A KIND"

如果最大是葫芦输出 "FULL HOUSE"

如果最大是同花输出 "FLUSH"

如果最大是顺子输出 "STRAIGHT"

如果最大的牌型小于等于三条输出"FOLD",劝 Alice 弃牌

输出不包括引号

按照题意进行模拟即可,根据题目条件对应大小。

#include<iostream>
#include<math.h>
#include<algorithm>
#include<utility>
using namespace std;
int n, m;
int a[15], b[15];
int main() {for (int i = 0; i < 5; i++) {cin >> a[i];}for (int i = 0; i < 5; i++) {int x;cin >> x;b[x]++;}int ma = 0;for (int i = 0; i < 4; i++) {ma = max(ma, b[i]);}if ((a[0] + 1 == a[1] && a[1] + 1 == a[2] && a[2] + 1 == a[3] && a[3] + 1 == a[4]) && ma == 5 && a[4] == 14) {cout << "ROYAL FLUSH";return 0;}if ((a[0] + 1 == a[1] && a[1] + 1 == a[2] && a[2] + 1 == a[3] && a[3] + 1 == a[4]) && ma == 5) {cout << "STRAIGHT FLUSH";return 0;}if ((a[0] == a[1] && a[0] == a[2] && a[0] == a[3]) || (a[1] == a[2] && a[1] == a[3] && a[1] == a[4])) {cout << "FOUR OF A KIND";return 0;}if ((a[0] == a[1] && a[0] == a[2] && a[3] == a[4]) || (a[2] == a[3] && a[2] == a[4] && a[0] == a[1])) {cout << "FULL HOUSE";return 0;}if (ma == 5) {cout << "FLUSH";return 0;}if (a[0] + 1 == a[1] && a[1] + 1 == a[2] && a[2] + 1 == a[3] && a[3] + 1 == a[4]) {cout << "STRAIGHT";return 0;}cout << "FOLD";return 0;
}

6.订单编号:

小缘开了一家公司,生意很好,每天都会收到很多订单,自动交易系统会自动给这些订单生成没有重复的订单编号。但是有一天,系统出现了未知的错误,导致当天的订单编号可能有重复的,这可把小缘急坏了。你可以帮助小缘按照规则给这些订单重新编号吗?

按照时间先后顺序给出 NN 个正整数作为原订单编号,你需要按照规则依次赋予这些订单新的编号,对于任意一个订单,要找到大于等于其原订单编号且未被使用过的(没有被之前的订单作为新的订单编号)的最小整数,作为它的新订单编号。

例如: 原订单编号依次为1 2 3 1,则新订单编号应该为1 2 3 4 (前3个订单的原订单编号都没有使用过,所以用其原订单编号即可,对于第四个订单,原订单编号为1,而1, 2, 3都已经被使用过,所以新订单编号为4)。

输入格式
第一行输入一个整数 NN (1≤N≤5×105)(1≤N≤5×105)。

第二行输入 NN 个数 aiai (1≤ai≤109)(1≤ai≤109) 作为原订单编号。

输出格式
输出一行,包含 NN 个整数为新的订单编号。

本题数据卡的比较死,标注答案使用vector加二分进行计算。

讲解可以参照视频:【算法Camp】【每日一题】Namomo Spring Camp 2022 Div2 第6天题解(数据结构、set)_哔哩哔哩_bilibili

#include <bits/stdc++.h>using namespace std;typedef pair<int, int> pii;
typedef long long ll;
typedef vector<int> vi;
//#define int long long
#define fir first
#define sec second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)x.size()
#define rep(i, l, r) for (int i = l; i <= r; ++i)
#define repd(i, l, r) for (int i = l; i >= r; --i)
#define pb push_backset<pair<int,int> >se;void myinsert(int l,int r)
{if(r<l)return;se.insert({r,l});
}int main() {ios_base::sync_with_stdio(false);cin.tie(NULL);int n;cin>>n;se.insert({2e9,1});rep(i,1,n){int x;cin>>x;auto it=se.lower_bound({x,0});if(it->sec <=x){cout<<x<<" ";myinsert(it->sec,x-1);myinsert(x+1,it->fir);se.erase(it);}else{cout<<it->sec<<" ";myinsert(it->sec+1,it->fir);se.erase(it);}}return 0;
}

7.饿饿 饭饭:

有nn个同学正在排队打饭,第ii个同学排在从前往后第ii个位置。但是这天食堂内只有一个食堂阿姨,为了使同学们都能尽快的吃上饭,每一个同学在打完一份饭之后就会排在队伍的末尾先吃着打到的饭,我们知道第ii个同学的饭量为aiai,也就是说第ii个同学要吃aiai份饭才能吃饱,当一位同学吃饱后,他就会立刻离开食堂,不会排在队伍的末尾。食堂阿姨想知道,在打完k份饭之后,队伍的样子是怎样的,但是食堂阿姨数学不太好,想让你帮忙想想办法。

输入格式
第一行给出两个整数nn,kk。

第二行给出nn个整数a1,a2,......ana1,a2,......an。

输出格式
如果食堂阿姨打饭数少于k,请输出"-1"。

否则按照队伍顺序输出每一个同学的编号

由于打的次数非常多,直接考虑需要打几轮,使用二分法。

最后注意要按顺序输出,需要调整一下最后几个人位置。

#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
typedef pair<int, int> PII;
typedef long long LL;int n;
LL k;
int a[N], c[N];LL cal(int x) // 前x轮打饭量
{LL res = 0;for(int i = 1; i <= n; i ++){if(a[i] <= x) res += a[i]; // 吃饱了else res += x;}return res;
}int main()
{LL sum = 0;scanf("%d%lld", &n, &k);for(int i = 1; i <= n; i ++){scanf("%d", &a[i]);sum += a[i];}if(sum < (LL)k) puts("-1");else{int l = 0, r = 1e9;while(l + 1 < r){int mid = l + r >> 1;if(cal(mid) <= k) l = mid;else r = mid;}k -= cal(l); // 剩余打饭量,剩余的饭肯定不够再来一轮cout<<k<<endl;int total = 0;for(int i = 1; i <= n; i ++){if(a[i] > l){c[++ total] = i;cout<<"c["<<total<<"] = "<<i<<endl;}}for(int i = k + 1; i <= total; i ++) // 再次打 k 次饭,所以跳过前面 k 个人printf("%d ", c[i]);for(int i = 1; i <= k; i ++)if(a[c[i]] != l + 1)printf("%d ", c[i]);}return 0;
}

8.任务分配:

你有nn个任务,其中第ii个任务,在sisi开始,eiei时刻结束,如果做这个任务,你能获得wiwi的收益。

但是你在一个时刻只能做一个任务,问选择哪些任务,能让你的收益尽量大。

注意:你在上一个任务结束后马上开始下一个任务是可以的。

输入格式
第一行一个整数nn。

接下来nn行,每行三个整数si,ei,wisi,ei,wi。

输出格式
一个数,表示答案。

样例输入
3
1 3 100
2 4 199
3 5 100
样例输出
200
数据规模
对于所有数据,保证1≤n≤103,1≤si<ei≤103,1≤wi≤1051≤n≤103,1≤si<ei≤103,1≤wi≤105。

典型贪心算法,直接寻找最优解就可以。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;typedef long long ll;
const int N = 1e3+10;struct thing{ll st;ll en;ll va;ll ti;
} t[N];bool cmp(struct thing a,struct thing b){return a.en<b.en;
}ll value[N] = {0};int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);ll n;cin>>n;for(int i=0;i<n;i++){cin>>t[i].st>>t[i].en>>t[i].va;t[i].ti = t[i].en - t[i].st;}sort(t,t+n,cmp);for(int i=0;i<n;i++){value[t[i].en] = max(value[t[i].en-t[i].ti] + t[i].va,value[t[i].en]);for(int j = t[i].en;j <= t[i+1].en;j++) value[j] = value[t[i].en];}cout<<value[t[n-1].en]<<"\n";
}

算法练习 Week2相关推荐

  1. 条件概率 扑克_建立没有条件分支的扑克手牌评估器

    条件概率 扑克 Building a team of developers requires a way to measure the talent and skill of candidates. ...

  2. deeplearning.ai 改善深层神经网络 week2 优化算法

    这一周的主题是优化算法. 1.  Mini-batch: 上一门课讨论的向量化的目的是去掉for循环加速优化计算,X = [x(1) x(2) x(3) ... x(m)],X的每一个列向量x(i)是 ...

  3. 深度探索推荐系统算法在工业界如何应用

    由于近些年深度学习技术的飞速发展,大力加速推动了AI在互联网以及传统各个行业的商业化落地,尤其是推荐系统.计算广告等领域.由于推荐系统与提升用户量以及商业化变现有着密不可分的联系,各大公司都放出了众多 ...

  4. 【限时】推荐算法工程师培养计划

    由于近些年深度学习技术的飞速发展,大力加速推动了AI在互联网以及传统各个行业的商业化落地,其中,推荐系统.计算广告等领域彰显的尤为明显.由于推荐系统与提升用户量以及商业化变现有着密不可分的联系,各大公 ...

  5. 备战秋招 |《百面机器学习》算法+leetcode开班报名!

    算法面试刷题班推荐: 以<百面机器学习>为教材 结合leetcode筛选刷题 秋招已经开始了!时间紧迫,也许别人已经得到offer了,你却还在不知所措?(文末重金招聘讲师) 六月份基本都是 ...

  6. 仅剩3天 | 带学《百面机器学习》葫芦书,算法+leetcode一应俱全

    或许你只要比别人准备多一点,你就可以在群体中脱颖而出. 年后基本都是春招和社招的高峰期,但好岗位招聘人数和应聘人数简直堪比春运抢票. 你总在抱怨"为什么别人机会那么好,能抢到你想要的名额?& ...

  7. 国内最强算法推荐系统,这波稳了!

    由于近些年深度学习技术的飞速发展,大力加速推动了AI在互联网以及传统各个行业的商业化落地,尤其是推荐系统.计算广告等领域.由于推荐系统与提升用户量以及商业化变现有着密不可分的联系,各大公司都放出了众多 ...

  8. Machine Learning Practical 爱宝week2

    这节课主要讲 随机梯度下降,分类 1. 批量梯度下降(Batch Gradient Descent,BGD) 使用整个训练集的优化算法被称为批量(batch)或确定性(deterministic)梯度 ...

  9. 算法基础、算法比赛快速入门(java)

    想用Java快速入门算法?这篇文章你得看! 提示:本文章适合想要入门算法,并且想 "快速" 达到一定成果的同学们阅读~ 文章非常非常非常长(可能是你见过最长的算法基础篇章)!!! ...

最新文章

  1. Centos 7 更改网卡名字
  2. linux服务器防cc攻击工具,宝塔linux面板
  3. BZOJ 2440 完全平方数(莫比乌斯-容斥原理)
  4. JS调用PHP 和 PHP调用JS的方法举例
  5. ODrive踩坑(四)AS5047P-SPI绝对值磁编码器,不需每次上电校准无刷电机,直接上电可用
  6. 理解了这三点,才敢说自己会写Python代码
  7. cent os7 安装elasticsearch-7.9.3(伪集群)和kibana-7.9.3
  8. 项目总结 -谷粒学院
  9. 学习笔记:人工势场法
  10. 【Unity3D进阶4-8】Unity3D 游戏框架
  11. 狂神说 Redis笔记
  12. 日常修行中离不开观想
  13. 第一章-问题求解策略-LA4238-Area of Polycubes
  14. (五十二)剑网三大风车伤害计算器
  15. Fresco加载图片优化
  16. 实现“快准狠”交付——小米HR研发团队敏捷实践
  17. DeepMind哈萨比斯对话哈里王子:2018年AI最大的突破在生物或化学
  18. android 键盘开发demo,Android自定义键盘之中文键盘demo
  19. HEL库入门教程:STM32CubeIDE汉化教程 直接在线安装 简单易懂
  20. Grafana 的安装和配置

热门文章

  1. 神奇又有趣的短链服务系统
  2. 【JavaWeb学习笔记】之HTMLCSS
  3. java 如何添加背景图片_JAVA界面设计怎么插入背景图片?
  4. 快播活该被抓,跟公诉人是谁无关
  5. egg风格 什么意思_egg_egg的意思和用法搭配
  6. python搜索引擎 django_Django之whoosh搜索引擎
  7. Python安装后的环境变量配置
  8. 手游为什么老被攻击?手游DDOS防护方法
  9. Yet another ProblemHint 1
  10. 2020年中国市场主体新增注册量、新增注销量及发展政策建议分析[图]