
CSP
Jay_fearless
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第十三次CCF计算机软件能力认证 棋局评估 (博弈论)
分析 棋局评估策略: Alice:往大赢 Bob:往小赢 用dfs,题目规定Alice先下,每次对还未放置的位置(0)放下Alice的棋子xxx,之后dfs到Bob的操作阶段,每次都判断当前局面是否可以结束,如果可以,就返回答案。 C++ 代码 #include<bits/stdc++.h> using namespace std; const int INF = 1e8; int g[3][3]; bool check(int x) //判断当前是否可以结束棋局,x为1表示Alice手原创 2021-04-10 17:31:52 · 250 阅读 · 0 评论 -
第十八次CCF计算机软件能力认证 化学方程式 (模拟+哈希表)
分析 首先找到方程式的左右等式,分别统计左右等式中所有元素的出现次数,然后对比是否左右两边个元素个数相同。 将每个元素分割出来,统计其中的元素个数。 用dfs统计括号中元素的具体个数。 C++ 代码 #include<bits/stdc++.h> using namespace std; typedef unordered_map<string,int> msi; //定义一个哈希表,表示每个元素的出现个数 string s; int n; msi dfs(string&原创 2021-04-09 23:47:10 · 148 阅读 · 0 评论 -
第十五次CCF计算机软件能力认证 数据中心 (Kruskal求最小生成树)
分析 根据题意可得知本题目是求最小生成树,同时找到最小生成树中的最大边的值。 利用Kruskal算法求最小生成树。 C++ 代码 #include<bits/stdc++.h> using namespace std; const int N = 5e4+10; int n,m,root; int fa[N]; struct node{ int a,b,w; bool operator<(const node &p) const{ retu原创 2021-04-08 23:12:58 · 146 阅读 · 0 评论 -
第十六次CCF计算机软件能力认证 小中大 (模拟)
直接模拟即可。 #include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int n; int a[N]; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int t; if(n%2){ t=a[n/2]; printf("%d原创 2021-04-08 21:54:00 · 110 阅读 · 0 评论 -
第十七次CCF计算机软件能力认证 推荐系统 (优先队列,哈希表)
分析 用一个数据结构存储每一个商品,使用大根堆qqq对每一个商品进行存储。 用哈希表deldeldel记录该商品是否被删除 由于遍历优先队列会让队列变空,所以用另一个优先队列temptemptemp存储出队的元素,最后再把所有元素返还给qqq C++ 代码 #include<bits/stdc++.h> using namespace std; typedef pair<int,int> PII; struct node{ int Id,id,sc; //商品种类Id,第i原创 2021-04-08 18:31:39 · 210 阅读 · 0 评论 -
第十五次CCF计算机软件能力认证 小明上学 (模拟)
分析 当前时间为t: 遇到黄灯:+t+红灯时间r 遇到绿灯:不加 遇到红灯:+t C++ 代码 #include<bits/stdc++.h> using namespace std; int n,r,y,g; int type,t,ans; int main() { cin>>r>>y>>g; cin>>n; while(n--) { cin>>type>>t;原创 2021-03-19 13:50:58 · 172 阅读 · 0 评论 -
第十二次CCF计算机软件能力认证 行车路线 (spfa)
分析 本题要求从1点出发,找到一条到达终点n的最短路。(单源最短路) 设type为路的种类,当路的type为0是代表是大路,此外所有的type都是代表小路。 因为题目保证答案不会超过1e6,所以type*type<=1e6,即type<=1000 C++ 代码 #include<bits/stdc++.h> using namespace std; const int N = 510,M = 2e5+10; int h[N],e[M],T[M],w[M],ne[M],idx;原创 2021-03-07 14:48:13 · 201 阅读 · 0 评论 -
第六次CCF计算机软件能力认证 送货 (找欧拉路径)
分析 本题是判断一个无向图是否具有欧拉路径,或者欧拉回路(起点和终点相同的欧拉路径) 对于无向图: 欧拉路径存在的充分必要条件:度数为奇数的点个数为2个或0个 欧拉回路存在的充分必要条件:度数为奇数的点个数为0个 度数为奇数的点有2个时,起点的度数不能是偶数: 由于本题要求求出字典序最小的路口顺序(点集合),所以需要将所有点加入到一个数组中进行排序,保证能得到最小字典序。 C++ 代码 #include<bits/stdc++.h> using namespace std; typedef原创 2021-03-05 11:37:10 · 167 阅读 · 0 评论 -
第六次CCF计算机软件能力认证 画图(Flood Fill)
分析 当操作为画线段时,要判断是横坐标还是纵坐标相同,之后把线段进行赋值。 当操作为画符号时,就利用Flood Fill(bfs)进行画图 C++ 代码 #include<bits/stdc++.h> using namespace std; int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; const int N = 110; int n,m,q; char g[N][N]; bool st[N][N]; struct node{ int x,y; }; v原创 2021-03-04 20:04:30 · 124 阅读 · 1 评论 -
第二十次CCF计算机软件能力认证 星际旅行 (计算几何)
CSP在线评测 分析 本题求每个点绕过一个圆球到其他所有点的距离最短路。 当空间为两维时,A,B两点与黑洞有如下两种情况: 当两点间连线没有穿过黑洞时: 当两点间连线穿过黑洞时: **用数组d[]存储所有点到黑洞中心的距离,rd[]存储所有点与黑洞相切的线段长度 ** 空间为多维时的情况与之前的情况一致,可直接进行计算。 C++ 代码 #include<bits/stdc++.h> using namespace std; int n,m; const int N = 1e2+1原创 2021-03-04 14:19:27 · 293 阅读 · 1 评论 -
第五次CCF计算机软件能力认证 高速公路 (tarjan求联通图)
CSP评测地址 分析 使用tarjan求出所有连通图,然后遍历所有点,将所有连通图的大小计算出来,如果该连通图内有至少两个点x,那么使用公式ans+=Cx2ans+=C_{x}^{2} ans+=Cx2 计算出所有的连通对的总个数。 dfn[u]==low[u]时: C++ 代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e4+10,M = 1e5+10; int h[N原创 2021-03-02 20:29:07 · 128 阅读 · 0 评论 -
第五次CCF计算机软件能力认证 模板生成系统(模拟)
CSP评测地址 只能过80分…… #include<bits/stdc++.h> using namespace std; int m,n; string s,tex[110],ans[110]; map<string,string> mp; bool st[110]; string gets(int l,string s) //统计 {{ }} 中的具体字符。 { int cnt=0; string temp; for(int i=l;i<(int)原创 2021-03-02 15:15:12 · 186 阅读 · 0 评论 -
第四次CCF计算机软件能力认证 网络延时 (树形Dp)
CSP评测地址 分析 本题其实是让我们求树的直径。 由于本题有n+m-1个节点,所以N要赋值为2e4+10。 之后利用树形Dp思想求树的直径。 C++ 代码 #include<bits/stdc++.h> using namespace std; const int N = 2e4+10; //注意总节点个数是n+m-1,要开2e4,不然会MLE int n,m,ans; int h[N],e[2*N],ne[2*N],idx; void add(int a,int b) { e[i原创 2021-03-02 10:16:35 · 139 阅读 · 0 评论 -
第四次CCF计算机软件能力认证 节日 (模拟)
CSP在线评测 分析 由于我们只用枚举200年的时间,所以可以用for循环直接模拟。 C++ 代码 #include<bits/stdc++.h> using namespace std; int a,b,c,y_1,y_2,ind=2; //ind为1850年1月1日的星期二 int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; void check(int x) //判断是否为闰年 { if((x%4==0 &&am原创 2021-03-02 00:01:56 · 112 阅读 · 0 评论 -
第四次CCF计算机软件能力认证 图像旋转 (模拟)
CSP评测地址 直接模拟。 #include<iostream> using namespace std; const int N = 1e3+10; int n,m,g[N][N],d[N][N]; int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>g[i][j]; for(in原创 2021-03-01 17:56:15 · 87 阅读 · 0 评论 -
第三次CCF计算机软件能力认证 最优灌溉 (Kruskal求最小生成树)
CCF官网评测 分析 Kruskal求最小生成树。 C++ 代码 #include<bits/stdc++.h> using namespace std; const int N= 1e5+10; struct node{ int a,b,w; bool operator<(const node &p) const{ //按边权从小到大排序 return w<p.w; } }edge[N]; int fa[N],n,m;原创 2021-03-01 17:40:35 · 91 阅读 · 0 评论 -
第三次CCF计算机软件能力认证 集合竞价 (模拟题)
分析 将每只股票存入结构体数组d中,然后枚举每个价格低于它的卖出数量和高于它的买入数量,每次二者取最小值,同时更新最大的开盘价。 C++ 代码 #include<bits/stdc++.h> using namespace std; const int N = 5e3+10; int idx; long long ansn=-1; struct node{ int type; double price; int num; bool is_del=false;原创 2021-02-26 11:26:45 · 176 阅读 · 0 评论