CSP2014-09
CSP201409-1 相邻数对


水题yyds ,要不是今天卡死在了201403-03题上我怎么会来拿水题出气,害
1 // 2 // main.cpp 3 // CSP201409-1 相邻数对 4 // 5 // Created by sylvia on 2021/10/15. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <algorithm> 10 #include <iostream> 11 using namespace std; 12 int main(){ 13 int n,i,ans=0; 14 cin>>n; 15 int a[n]; 16 for (i=0;i<n;++i){ 17 cin>>a[i]; 18 } 19 sort(a,a+n); 20 for(i=0;i<n-1;++i){ 21 if(a[i+1]-a[i]==1) ans++; 22 } 23 cout<<ans<<endl; 24 return 0; 25 }
CSP201409-2画图



出气题第二题,2014-03明日再战
1 // 2 // main.cpp 3 // CSP201409-2画图 4 // 5 // Created by sylvia on 2021/10/15. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <string.h> 11 using namespace std; 12 #define MAX 100+2 13 14 int main(){ 15 int n,x,y,a,b,ans[MAX][MAX],res=0;; 16 cin>>n; 17 memset(ans,0,sizeof(ans)); 18 19 for (int i=0;i<n;i++){ 20 cin>>x>>y>>a>>b; 21 for (int j=x+1;j<=a;j++){ 22 for (int k=y+1;k<=b;k++){ 23 ans[j][k]=1; 24 } 25 } 26 } 27 for (int i=1;i<=100;i++){ 28 for (int j=1;j<=100;j++){ 29 res+=ans[i][j]; 30 } 31 } 32 cout<<res<<endl; 33 return 0; 34 }
CSP201409-3 字符串匹配


仍然水题,但是我被字符串搞怕了qwq,每次遇到字符串,读入上我就败了orzzzz
使用strlwr转换为小写,使用strstr查找子串
列一下相关函数:
1.strstr():检索子串在字符串中首次出现的位置
原型:char *strstr( char *str, char * substr );
如未出现返回NULL
头文件:#include<string.h>
2.strlwr():将字符串str中的大写字母转换为小写
原型:char *strlwr(char *str);
直接改变str串
头文件:#include <string.h>
3.strupr():将字符串s转换为大写形式
原型:char *strupr(char *str);
头文件:#include <string.h>
4.tolower():把给定的字母转换为小写字母
原型:int tolower(int c)
只能转换单个字符,返回小写字母
头文件:#include <ctype.h>
4.toupper():把给定的字母转换为大写字母
原型:int tolupper(int c)
只能转换单个字符,返回大写字母
头文件:#include <ctype.h>
另外一些查找函数:https://www.cnblogs.com/kmist/p/10099867.html
1 // 2 // main.cpp 3 // CSP201409-3 字符串匹配 4 // 5 // Created by sylvia on 2021/10/16. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <string.h> 11 12 using namespace std; 13 #define N 100+2 14 char str[N],line[N],line2[N]; 15 16 int main(){ 17 int a,n; 18 cin>>str; 19 cin>>a>>n; 20 if(!a) strlwr(str); 21 for (int i=1;i<=n;i++){ 22 cin>>line; 23 strcpy(line2,line); 24 if(!a) strlwr(line); 25 if(strstr(line,str)) cout<<line2<<endl; 26 } 27 return 0; 28 }
CSP201409-4 最优配餐



经典dfs(多源最短路)
复习dfs戳这里
dfs解决两类问题:
第一类问题:从节点A出发,有前往节点B的路径吗?
第二类问题:从节点A出发,前往节点B的哪条路径最短?
以栋栋的分店为起点,客户为目标点,求每个客户到分店的最短距离,若以客户为起点搜索,则对于每一个客户都要进行一次搜索,单次搜索的时间复杂度为O(n2),则总的时间复杂度O(n4)。
换个思路,我们假设存在一个超级远点,这个超级远点与每个分店的距离为0,即将分店加入队列,对其进行bfs,谁先搜索到客户算谁的
这里学习到了结构体内构造函数进行初始化,以及第一次使用stl里面的队列,果然好用,以下几个常用函数
- front():返回 queue 队列头
- back():返回 queue 队列尾
- push(obj):加入队列
- pop():出队
- size():队列长度
- empty():判断是否队空,空为true
1 // 2 // main.cpp 3 // CSP201409-4 最优配餐 4 // 5 // Created by sylvia on 2021/10/20. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <algorithm> 11 #include <stdio.h> 12 #include <queue> 13 #include <string.h> 14 using namespace std; 15 #define MAX 1000+5 16 #define LL long long 17 int cnt[MAX][MAX]; 18 int vis[MAX][MAX]; 19 LL ans=0; 20 int n,m,k,d; 21 struct node{ 22 int x,y,t; 23 node(int xx,int yy,int tt=0):x(xx),y(yy),t(tt){} //初始化 24 }; 25 26 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; 27 int main(){ 28 register int a,b,num; 29 memset(vis,0,sizeof(vis)); 30 memset(cnt,0,sizeof(cnt)); 31 cin>>n>>m>>k>>d; 32 queue<node> q; 33 while(m--){ 34 cin>>a>>b; 35 q.push(node{a,b}); 36 vis[a][b]=1; //加入队列 37 38 } 39 while(k--){ 40 cin>>a>>b>>num; 41 cnt[a][b]+=num; //送餐数 42 } 43 while(d--){ 44 cin>>a>>b; 45 cnt[a][b]=-1; //走不通 46 } 47 while (!q.empty()){ 48 node v=q.front(); //取d头元素 49 q.pop(); //出队 50 if(cnt[v.x][v.y]>0){ //如果到了客户点 51 ans+=(LL)cnt[v.x][v.y]*v.t; 52 } 53 for (int i=0;i<4;++i){ //四个方向 54 int tx=v.x+dir[i][0]; 55 int ty=v.y+dir[i][1]; 56 //可以走并未走过 57 if(tx>0&&tx<=n&&ty>0&&ty<=n&&!vis[tx][ty]&&cnt[tx][ty]!=-1){ 58 q.push(node{tx,ty,v.t+1}); 59 vis[tx][ty]=1; //打标记 60 } 61 } 62 63 } 64 cout<<ans<<endl; 65 return 0; 66 67 }

浙公网安备 33010602011771号