一、距离和
题目链接:距离和~~~~~~~~~~~~~
题目要求:
两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为 2,L 和 Q 的距离为 5。
对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。
例如:ZOO 的内部距离为 22,其中 Z 和 O 的距离为 11。
请问,LANQIAO 的内部距离是多少?
解题思路:
暴力签到,搞两个循环,每次让两个字母相减,记得加abs不然有负数。
#include<bits/stdc++.h> using namespace std; char s[7] = {'L','A','N','Q','I','A','O'}; int main() { int num = 0; int len = strlen(s); for(int i=0;i { for(int j=i+1;j { num += abs(s[i] - s[j]); } } cout<<num; return 0; }
二、扩散
题目链接:扩 !! 散 !!
题目要求:
小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。
小蓝在画布上首先点了一下几个点:(0,0),(2020,11),(11,14),(2000,2000)。
只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。
请问,经过 2020 分钟后,画布上有多少个格子是黑色的。
解题思路:
这是一道 bfs哦,坐标可能都是负数,所以向右,向上平移一下,这样的话相对位置不会变化,然后bfs即可!!!!
#include<bits/stdc++.h> using namespace std; bool a[10000][10000]; int dir[4][2]={0,1,0,-1,1,0,-1,0}; long long ans; struct node{ int x,y,step; }; void bfs() { queueq; a[0+3000][0+3000]=1; a[2020+3000][11+3000]=1; a[11+3000][14+3000]=1; a[2000+3000][2000+3000]=1; q.push({0+3000,0+3000,0}); q.push({2020+3000,11+3000,0}); q.push({11+3000,14+3000,0}); q.push({2000+3000,2000+3000,0}); ans=4; while(q.size()) { node temp=q.front(); q.pop(); if(temp.step==2020) continue; for(int i=0;i<4;i++) { int xx=temp.x+dir[i][0]; int yy=temp.y+dir[i][1]; if(!a[xx][yy]) { ans++; a[xx][yy]=1; q.push({xx,yy,temp.step+1}); } } } } int main() { bfs(); cout<<ans; return 0; }
三、错误票据
题目链接:超级简单的 错误票据
题目要求;
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。
因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。
你的任务是通过编程,找出断号的 ID 和重号的 ID 。
假设断号不可能发生在最大和最小号。
解题思路:
吊题,一开始我用哈希表做的,结果错了,后面发现直接排序相减就可以了,因为数字是相连的如果相减大于1说明断号了,如果前后相等说明连号了,吊题不难!!!
#include<bits/stdc++.h> using namespace std; const int N = 1e4+10; int a[N]; int main() { int n; cin >> n; int cnt = 0; while(scanf("%d",&a[cnt++]) != EOF); sort(a, a+cnt); int ans1, ans2; for(int i = 1; i < cnt; i++) { if(a[i] - a[i-1] > 1) { ans1 = a[i-1] + 1; } if(a[i] == a[i-1]) { ans2 = a[i]; } } cout << ans1 << ' ' << ans2 << endl; return 0; }
总结:
昨天有事情今天补上啦,一起加油!