OJ练习
宫·商
这个作者很懒,什么都没留下…
展开
-
计算循环小数C++代码
计算循环小数,输入分别是被除数和除数,输出中循环体用[]括起来,采用龟兔赛跑算法。#include<iostream>using namespace std;void transform(int n,int d){ //n是分子(numerator)d是分母(denominator) if(n*d<0){ //如果分子或分母是负数 cout<&l...原创 2019-10-14 00:14:58 · 1269 阅读 · 3 评论 -
C++中get,put和getline函数使用
getline函数使用#include <iostream>#include <string.h> //getline有关函数在该头文件里 using namespace std;int main() { string str; char ch[100]; //全局函数getline(cin,string型变量,可选项结束符[char],没有则默认'\n')...原创 2019-10-14 00:14:49 · 2631 阅读 · 1 评论 -
算24问题C++代码
算24问题,递归与临时数组的练习,参考博客#include<bits/stdc++.h>using namespace std;//数组作为实参,形参要多注意一下,多练习使用临时数组;bool search(double a[],int x) { if(x==1&&fabs(a[1]-24)<=1e-6) return 1; //题目要求除法运...原创 2019-10-14 00:14:40 · 794 阅读 · 0 评论 -
动规例题C++代码
动规题目:字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?参考博客#include <iostream>#include <string.h>#include <algorithm>#define N 26using namespace...原创 2019-10-14 00:14:30 · 482 阅读 · 0 评论 -
POJ_1836(动规,上升下降子序列问题)
POJ_1836,动规问题,上升下降子序列问题, 和普通的上升/下降子序列问题最大的不同:要考虑队列中点一个或两个的情况#include <iostream>using namespace std;int main(){ int n; cin>>n; int left[n],right[n]; double alignment[n]; for(int i=0;...原创 2019-10-14 00:14:21 · 163 阅读 · 0 评论 -
POJ_1935(树的最优遍历,动规与DFS算法)
POJ_1935,树的最优遍历,结合动规与DFS,参考博客#include <stdio.h>#include <string.h>#include <vector>#define N 50005using namespace std;//某城市的道路,ed为连接的城市,val为道路长度,存放在gra[]中 struct E{ int ed...原创 2019-10-14 00:14:12 · 220 阅读 · 0 评论 -
PTA甲级1118(压缩路径的并查集问题)
PTA甲级1118,压缩路径的并查集算法#include<iostream>#include<vector>#include<algorithm>using namespace std;int leader[10005];vector<int> trees;int findleader(int bird){ int temp=bird...原创 2019-10-14 00:14:04 · 195 阅读 · 0 评论 -
POJ_1019(过程模拟问题)
POJ_1019,过程模拟问题,代码有所参考#include <iostream>using namespace std;int c[52850],n[52850];long long s[52850];int length(int x){ int sum=0; while (x != 0){ x /= 10; sum++; } return sum;}...原创 2019-10-14 00:13:52 · 127 阅读 · 0 评论 -
POJ_1715(过程模拟问题)
POJ_1715,过程模拟问题,要求输出第N个大的8位无重复数字的16进制数。思路:从高位开始,从大到小计算该位填某一数字能有多少种可能(排列组合), 用N减去所有可能数从而找到其对应数值。注意首位是0时要去0。代码有所参考。#include <stdio.h>#include <string.h>bool vis[20]; //16位,表示每个数字是否出现过了 ...原创 2019-10-14 00:13:44 · 213 阅读 · 0 评论 -
快速幂与快速乘算法C++代码
快速幂与快速乘算法,参考博客#include <iostream>using namespace std;long long qpow(long long a, long long n, long long mod){ //快速幂,计算a^n % mod long long re = 1; while(n){ if(n & 1) //判断...原创 2019-10-14 00:13:35 · 679 阅读 · 0 评论 -
快速排序算法C++代码
快速排序算法,代码有所参考#include <iostream>using namespace std; void quicksort(int a[], int left, int right) { int i = left, j = right, temp = a[right]; //temp中存的就是基准数(轴) if(left >= right) return...原创 2019-10-14 00:13:27 · 3340 阅读 · 0 评论 -
POJ_1390(三维动规)
POJ_1390,三维动规题目,按照大块分类,参考博客,重点:1.构造递归函数2.通过三维数组记忆化保存#include<iostream>#include<cstring>#include<cstdio>using namespace std;struct Box{ int color,len;}box[205];int t,n,x,...原创 2019-10-14 00:13:17 · 386 阅读 · 0 评论 -
顺序栈的C++代码
顺序栈的C++实现,代码有所参考#include <stdio.h>#include <iostream>#include <stdlib.h>using namespace std;#define MaxSize 20struct SeqStack{ int Data[MaxSize]; // 存储元素的数组 int Top; ...原创 2019-10-14 00:13:07 · 842 阅读 · 0 评论 -
图的拓扑排序算法C++代码
2019清华叉院夏令营某组笔试题第一题:图的拓扑排序算法(先得到不等式组然后转换为图的拓扑排序)题目大意:n个人,编号1到n,给出m组数据,如0 1 2表示编号为1的人在编号为2的人出生前就死了;1 1 2表示存在一段时间,1和2两个人同时活着。现在要求给出一组能满足上述m组数据的n个人出生死亡日期,不存在这样的日期就返回"NO"。#include <iostream>#incl...原创 2019-10-14 00:12:58 · 521 阅读 · 0 评论 -
POJ_1067(Wythoff Game,取石子问题)
POJ_1067,威佐夫博弈(Wythoff Game),取石子问题,计算“必败态”,参考博客#include <iostream>#include <cmath>using namespace std;int main(){ long x,y,k; while(cin>>x>>y){ k=min(x,y); y=max(x,y); ...原创 2019-10-14 00:12:49 · 158 阅读 · 0 评论 -
计算组合数C(n,m)的C++代码
计算组合数C(n,m),从n中选m个数,数论题目,思路为杨辉三角在组合数中的应用。输入:若干组n和m,n=0表示输入结束输出:若干组C(n,m)#include<iostream>using namespace std;const int N = 2000 + 5;const int MOD = (int)1e9 + 7;int comb[N][N];//comb[n][...原创 2019-10-14 00:12:36 · 2281 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题,例如POJ_2746,递推式求解N人(0开始编号)报M数出圈的最后胜利者,参考博客思路:f[1] = 0;当一个人的时候,出队人员编号为0,程序中对应s的初始值f[n] = (f[n-1] + m)%n;m表示每次数到该数的人出列,n表示当前序列的总人数#include <stdio.h>int main(){ int n, m, i, s = 0;...原创 2019-10-14 00:12:27 · 175 阅读 · 0 评论 -
dijkstra算法标准示例C++代码
dijkstra算法标准示例,解决最短路径问题输入:第一行两个正整数n,m,表示有n个城市和m条道路(城市最多100个,编号从0到99)随后m行分别是三个正整数a,b,d表示道路的两端城市编号和距离输出:n-1行,每行一个整数,第i行整数表示编号为0到编号为i的城市的最短路径长度;如果没有道路则输出9999。#include<stdio.h>#include<std...原创 2019-10-14 00:12:17 · 591 阅读 · 0 评论 -
PTA甲级1007(动规,最大连续子序列和)
PTA甲级1007,动规问题,最大连续子序列和(打印首尾元素)#include <iostream>using namespace std;int nums[10000],copys[10000],used[10000];int main(){ int num,ansid,ans=-1; cin>>num; bool flag=0; for(int i=0;...原创 2019-10-14 00:12:05 · 311 阅读 · 0 评论 -
最大子矩阵和C++代码
动规,最大子矩阵和#include <iostream>#include <cstring>using namespace std;//nums数组存储初始数据,sums存储各列(100列)在i行和j行之间所有元素之和,随着i和j的变化而变化 int nums[100][100],sums[100];int main(){ int n,m; cin>&g...原创 2019-10-14 00:11:56 · 2840 阅读 · 0 评论 -
POJ_1251(kruskal算法)
POJ_1251,求最小生成树,这里采用基于并查集路径压缩的kruskal算法。最小生成树有prim(适用于稠密图)和kruskal(适用于稀疏图)算法,prim算法复杂度:v^2:每个(v)找直接相连边(v)kruskal算法复杂度:eloge:将边按权值排序#include <iostream> #include <algorithm> #include &...原创 2019-10-14 00:11:46 · 339 阅读 · 0 评论 -
最长公共子序列问题C++代码
求最长公共子序列长度(LCS问题)#include <iostream>#include <string.h>#include <algorithm>using namespace std;int lcs(string str1,string str2){ int len1=str1.size(),len2=str2.size(); int le...原创 2019-10-14 00:11:37 · 673 阅读 · 0 评论 -
PTA甲级1040(最长回文字符串)
PTA甲级1040,动规问题,最长回文字符串,参考博客#include <iostream>using namespace std;int dp[1010][1010];int main() { string s; getline(cin, s); int len = s.length(), ans = 1; for(int i = 0; i &...原创 2019-10-14 00:11:18 · 275 阅读 · 0 评论 -
PTA甲级1030(带路径打印和费用最优的dijkstra题目)
PTA甲级1030,带路径打印和费用最优的dijkstra题目,代码有所参考#include <iostream>#include <cstring>#include <stack>#define INF 0x3f3fusing namespace std;int themap[501][501],thecost[501][501];bool vi...原创 2019-10-14 00:11:10 · 220 阅读 · 0 评论 -
POJ_1011(DFS算法)
POJ_1011,DFS算法,不可用贪心算法,参考博客#include<iostream>#include<algorithm>using namespace std;struct Stick{ int m_length; //木棒的长度 bool m_used; //木棒是否被使用过};Stick g_stick[70];int g_total, ...原创 2019-10-14 00:10:54 · 696 阅读 · 0 评论 -
POJ_2181(贪心问题)
POJ_2181,贪心问题,代码有所参考题目思路:在数组首位插入0,然后从前往后搜,交替执行:(1)找一个比相邻两个数都大或等于的数,+;(2)找一个比相邻两个数都小或等于的数,-;#include <cstdio>int potions[150001];int main(){ int num; scanf("%d",&num); potions[0]=0;...原创 2019-10-14 00:10:44 · 224 阅读 · 0 评论 -
POJ_1032(贪心问题,正整数拆分)
POJ_1032,贪心问题,把正整数n表示成若干个不同的正整数的和,求积的最大值,参考博客#include <iostream>using namespace std;int main(){ int n,group; cin>>n; int nums[500]; //共有group+1组(编号0~group-1),初始时第0组人数为2,之后每组依次多一人 f...原创 2019-10-14 00:10:34 · 278 阅读 · 0 评论 -
POJ_1088(二维动规)
POJ_1088,二维数组动规题目,结合记忆化搜索(体现在length数组上,保存每个子问题结果)#include <iostream>#include <cstring>using namespace std;int height[101][101];int length[101][101];int r,c;int get_length(int i,int ...原创 2019-10-14 00:10:25 · 583 阅读 · 0 评论 -
POJ_1952(动规,去重的最长递减子序列)
POJ_1952,动规+去重问题,最长递减子序列(去重)。思路:利用一维数组进行记忆化搜索,倒序开始,以每个点作为起点开始找序列长度和种类 。先找到以每个起点开始的序列长度,参照二维数组动规题目1088,结合记忆化搜索(currday[i]不是-1就不再进行操作),然后找到以每个起点开始的序列种类,详见注释。也可以正序开始,参照博客。#include <iostream>#inc...原创 2019-10-14 00:10:14 · 221 阅读 · 0 评论 -
PTA甲级1103(DFS算法)
PTA甲级1103,DFS问题,采用两层vector代替不定长二维数组#include <iostream>#include <cmath>#include <vector>#include <algorithm>using namespace std;int powers[25];int ans=0;vector<int>...原创 2019-10-14 00:09:33 · 199 阅读 · 0 评论 -
POJ_1321(DFS算法)
POJ_1321,dfs不规则棋盘放棋子问题#include <iostream>#include <cstring>using namespace std;//chess该位置可否放棋子(0不可1可),不可可能有本身不能放或者该位置已经放了棋子 //haschess第0行表示该行是否有棋子,第1行表示该列是否有棋子 bool chess[8][8],hasch...原创 2019-10-14 00:09:22 · 179 阅读 · 0 评论 -
POJ_4123(DFS算法,马走日)
POJ_4123,dfs马走日问题,同西洋棋(POJ_2488)#include <cstdio>#include <cstring>const int N=11;int chess[N][N],n,m,x0,y0,nm,ans=0;int zf[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,...原创 2019-10-14 00:09:09 · 316 阅读 · 0 评论 -
POJ_2488(DFS算法,西洋棋)
POJ_2488,dfs西洋棋问题,同马走日(POJ_4123)#include <iostream>#include <cstring>#include <cmath>using namespace std;bool chess[26][26];int row,col,count,flag;int nextstep[8][2]={{ -1,-2 ...原创 2019-10-14 00:08:58 · 337 阅读 · 0 评论 -
POJ_1661(DFS算法)
POJ_1661,dfs,通过二维记忆数组缩短时间#include <iostream>#include <cstring>#include <vector>#include <algorithm>using namespace std;struct plat{ int x1,x2,height;};vector <plat&...原创 2019-10-14 00:08:43 · 177 阅读 · 0 评论 -
POJ_4127(用栈和队列实现的BFS算法)
POJ_4127,用栈和队列实现BFS迷宫题目,但二维数组仍更常用#include <iostream>#include <queue>#include <stack>using namespace std;bool canotwalk[5][5];struct point{ int i,j,distance;}points[5][5];que...原创 2019-10-14 00:08:29 · 380 阅读 · 0 评论 -
POJ_4115(有穿墙次数的BFS算法)
POJ_4115,有穿墙次数(能量)的BFS题目,代码有所参考#include <iostream>#include <queue>using namespace std;struct point{ //该点的行列,到达用时,剩余能量,能否不消耗能量通过 int r,c,alltime,chance; bool cango;}points[200][200...原创 2019-10-14 00:08:19 · 210 阅读 · 0 评论 -
POJ_4001(一维BFS算法)
POJ_4001,一维BFS算法,通过队列实现而不递归,每次标记临近的点,标记后均为最短距离(即值一旦被修改就是最优值),常用于解决最短路径问题(如迷宫)#include <iostream>#include <cstring>#include <queue>using namespace std;int minutes[100001];queue ...原创 2019-10-14 00:08:08 · 208 阅读 · 0 评论 -
PTA甲级1091(三维BFS算法)
PTA1091,三维BFS,代码有所参考。#include <iostream>#include <cstring>#include <queue>using namespace std;struct point{ int x,y,z;};bool brain[1300][130][65],visit[1300][130][65];int m,...原创 2019-10-14 00:07:57 · 182 阅读 · 0 评论 -
POJ_2811(熄灯问题)
POJ_2811,熄灯问题,同画家问题(POJ_1681),通过二进制枚举第一行的情况后逐行操作,判断最后一行是否全亮#include <iostream>#include <cstring>#include <cmath>using namespace std;int main(){ bool lights[7][8],copyl[7][8],an...原创 2019-10-14 00:07:09 · 225 阅读 · 0 评论 -
POJ_1681(画家问题)
POJ_1681,画家问题,同熄灯问题(POJ_2811),通过二进制枚举第一行的情况后逐行操作,判断最后一行是否全涂色#include <iostream>#include <cstring>#include <cmath>using namespace std;bool floors[20][20],copyf[20][20];int main(...原创 2019-10-14 00:06:56 · 401 阅读 · 0 评论