思路:
遍历每个点,查看点的右方和下方,如果两个点分属不同的州且颜色相同输出 No 并结束程序,否则继续遍历,为什么不用查看上方和下方呢,因为我们是按顺序遍历的从左到右,从上到下,在遍历的过程中已经确认这个点和这个点的上方和左方符合条件了。
遍历完后输出 Yes。
代码:
#include<bits/stdc++.h>using namespace std;#define LL long long#define itn int#define ull unsigned long longint h,w,n,jz[210][210],c[500];int dx[]={0,1},dy[]={1,0};int main(){ memset(jz,0,sizeof(jz)); cin>>h>>w>>n; for(int i=1;i<=h;i++){ for(int j=1;j<=w;j++)cin>>jz[i][j]; } for(int i=1; ...
思路:
暴力枚举直到现在的日期满足出现过的数字为 222 种及以下。
注意当月份和天数小于 101010 时,需要在前面补一个 000,而这个 000 也是需要算进出现过的数字种数里的。
统计出现过的数字种数可以使用 unordered_set,这是基于哈希表实现的无序关联容器,不会有重复的元素。
至于每月天数可以做下洛谷的这题。
代码:
#include<bits/stdc++.h>using namespace std;#define LL long long#define itn int#define ull unsigned long longint y,m,d,tamp;char fuh;unordered_set<int>se;int day(int y,int m){ if(m==2){ if(y%4==0&&y%100!=0)return 29; else if(y%400==0)return 29; else{ return 28; } } if(m==1||m ...
思路:
因为可以添加 l、q、b 这三个字符,所以我们可以先把左、右端的这三个字符先拿出来,然后判断一下中间是否回文,如果不回文输出 No,如果回文再判断一下左,右端拿出来的字符串。
因为只能在开头处加字符,所以当从右端取出来的字符串的字符数量比左端取出来的字符串的字符数量少时,输出 No,当从右端取出来的字符串的字符数量比左端取出来的字符串的字符数量多时,分别从两个字符串的结尾对比字符,如果字符不一样则输出 No,因为只能加,不能删。
如果以上都过了,那么就输出 Yes。
代码:
#include<bits/stdc++.h>using namespace std; #define LL long long#define itn int#define ull unsigned long longstring s;int T;int main(){ cin>>T; while(T--){ cin>>s; int flag1=0,flag2=0; int len=s.size();s=" "+s; ...
思路:
定义两个数组 aaa 和 bbb,其中 aaa 存输入为正数的情况,bbb 存输入为负数时负数的绝对值,在定义两个变量 cntcntcnt 存起点矿石的情况,ansansans 存最多挖矿石几个矿石不包含起点矿石的情况。
输入完后将 aaa 数组与 bbb 数组排序。
排序过后枚举情况,共有两种情况,第一种完全不向右侧挖掘,第二种向右走两次向左走一次,每次枚举完情况后更新 ansansans 的值。
最终的结果为在输入中 ans+cntans+cntans+cnt。
代码:
#include<bits/stdc++.h>using namespace std; #define LL long long#define itn int#define ull unsigned long longvector<LL>a,b;// 分别存储正数和负数(取绝对值后)int main(){ LL n,m; cin>>n>>m; LL cnt=0;// 计算坐标为 0 的矿洞数量 a.push_back(0);// 下标从 1 开 ...
思路:
题目中给出的是一个排列 ppp。
排列说明了这个数组是由一到 nnn 组成的,且不重复。
那么对于这个排列我们可以从一到 n−1n-1n−1 依次枚举,对于每次访问到的第 iii 个数,记录最大值和最小值,相减判断是否是等差数列。
当 i>2i \gt 2i>2 时,对于一到 iii,排完序的数组等差数列只能是一或二。
但是这么做只能判断等差为一的情况,所以还要特判一下。
由于 iii 要大于二,而 iii 最大为 n−1n-1n−1 所以我们要特判一下 n≤3n \le 3n≤3 的情况。
代码:
#include<bits/stdc++.h>using namespace std;#define LL long long#define itn int#define ull unsigned long longLL a[1000005];void slove(){ LL mx=INT_MIN,mn=INT_MAX,n,ans=0; bool flag1=1,flag2=1; scanf("%lld",&n) ...
本篇介绍c++ STL 栈 stack。
1. 性质
栈是 STL 中实现的一个先进后出,后进先出的容器。
文字模拟:
x 入栈
y 入栈
取出栈顶元素 y
弹出栈顶元素 y
取出栈顶元素 x
弹出栈顶元素 x
栈为空
2. 头文件及定义
#include<stack>// 头文件stack</*类型*/>/*栈名*/;// 定义
3. 方法函数
操作 栈名为 sss
含义及复杂度
s.push(x)
元素 x 入栈 OOO(111),类型需一致
s.pop()
移除栈顶元素 OOO(111)
s.top()
取得栈顶元素 OOO(111)
s.empty()
栈内是否为空,空为真 OOO(111)
s.size()
栈内元素个数 OOO(111)
本篇介绍队列 queue。
1. 性质
队列是一种先进先出的数据结构。
简要文字模拟:
向队列插入一个 x
向队列插入一个 y
取出队列的元素取出的为 x,因为 x 最先放入队列
取出队列的元素取出的为 x,因为 x 最先放入队列,并且上次取出没有弹出
弹出队列顶部元素
取出队列的元素取出的为 y
弹出队列顶部元素
队列为空
2. 定义及头文件
#include<queue>//头文件queue</*填需要的类型*/>/*填队列名字*/;
3. 方法函数
操作 队列名为 dldldl
含义及复杂度
dl.front()
返回队首元素 OOO(111)
dl.pop()
弹出队首元素 OOO(111)
dl.back()
返回队尾元素 OOO(111)
dl.push(/*要加入队列的元素*/)
一个元素进队 OOO(111)
dl.size()
队列元素个数 OOO(111)
dl.empty()
队列是否为空 OOO(111)
注:判断队列是否为空,为空返回 1,否则返 ...
本篇介绍 vector 数组。
定义
// 一维vector</*填数组需要的类型*/>/*数组名字*/;// 以下以 int 类型示范//创建一个一维的 int 类型 vector 数组,数组名叫 szvector<int>sz;// 创建一个长度为 n 的数组vector<int>sz(n);// 创建一个长度为 n 的数组,并且数组内的所有值为 ivector<int>sz(n,i);// 二维vector<vector</*填数组需要的类型*/> >/*数组名字*/;vector<vector</*填数组需要的类型*/> >/*数组名字*/(/*第一维的大小*/,vector</*填数组需要的类型*/>(/*第二维的大小*/));// 以下以 int 类型示范// 创建一个类型为 int 的二维 vector 数组,名字叫szvector<vector<int> >sz;// 创建一个普通数组这么写 "int sz[5][10]&q ...
思路:
定义结构体,结构体包含三个成员 leftleftleft 表示左边的人,rightrightright 表示右边的人,czczcz 表示这两个人的差值,自定义排序:
bool operator <(const node &X)const{ return cz==X.cz?left>X.left:cz>X.cz;}
定义优先队列,类型为上面定义的结构体。
定义标记数组 bjbjbj 标记这个人是否已经被搭配了。
定义二维数组 ansansans 存答案。
定义 ans2ans2ans2 存答案的数量。
定义数组 lastlastlast 和 nexnexnex 模拟链表,记录上一个人和下一个人。
在输入时顺便把 lastlastlast 和 nexnexnex 初始化,初始化时 lastilast_ilasti 的值为 i−1i-1i−1,nexinex_inexi 的值为 i+1i+1i+1。
在输入完后,遍历字符串,直到现在遍历到的是字符串的最后一个字母,注意是遍历到而不是遍历完,当字符串的第 iii 个字符与第 i+1 ...
思路:
定义一个 unordered_set 用于标记出现过那些人,定义名字为 sesese。
定义一个 unordered_map 记录每个人所获得的分数,键为字符串类型,值为整形,定义名字为 personpersonperson。
定义结构体用于存每个人的分数,此结构体排序用。
观察题目所给出的操作的输入格式,发现操作的标志一定是在这一行的第二个字符串,而这一行字符串的数量一定大于三,所以我们可以先输入前三个字符串,然后判断第二个字符串是什么操作。
如果第二个字符串等于 likes 那么第三个字符串就是第二个人的名字。
如果第二个字符串为 posted 或 commented 时,那么第二个人名的位置就在第四个字符串,我们把他输入进来。
在输入找到第二个人的名字后,我们用 erase 把第二个人名后面多余的 's 删除,使这个字符串只有人名,然后判断第一个人名和第二个人名中有没有淘淘,因为只有和淘淘互动了,他跟淘淘的因子分数才会增加,然后再判断下这些人名有没有在 se 里面出现过,如果没有出现过就把他加入到里面,最后把这些操作里的最后一个字符串输入进来就行了。
我们用创建一个 ...


![题解:P10905 [蓝桥杯 2024 省 C] 回文字符串](https://fastly.jsdelivr.net/npm/xyx404blogphoto@1.0.3/img/wenz/P10905.jpg)
![题解:P10904 [蓝桥杯 2024 省 C] 挖矿](https://fastly.jsdelivr.net/npm/xyx404blogphoto@1.0.3/img/wenz/P10904.jpg)







