算法练习
在线OJ算法题
NJNUqhx
大一新生,努力学习ing
展开
-
序列之争1
#include<iostream>#include<vector>#include<algorithm>using namespace std;bool cmp(int a, int b){ return a > b;}int main(){ int n, m; cin >> n >> m; vector<int> v(n, 0); for (int i = 0; i < n; i++) c.原创 2021-07-09 19:09:03 · 146 阅读 · 0 评论 -
约瑟夫问题进阶
#include<iostream>#include<vector>using namespace std;int main(){ int n, m; cin >> n >> m; vector<int> v(m); vector<int> p(n); for (int i = 0; i < m; i++) cin >> v[i]; for (int i = 0; i < n; i++.原创 2021-05-30 18:31:55 · 121 阅读 · 0 评论 -
被3整除的数列(动态规划)
#include<bits/stdc++.h>using namespace std;const long long r=1e9+7;int main(){ /* 能被3整除,则数位和为3的倍数 0,1,2 */ /* dp[0][i]->前i个数字组成除3余0的子序列的个数 dp[1][i]->前i个数字组成除3余1的子序列的个数 dp[2][i]->前i个数字.原创 2021-04-22 21:34:59 · 253 阅读 · 0 评论 -
棋盘(搜索)
#include<iostream>using namespace std;int chess[120][120];int m,n;bool success=false;int answer=100000;/* 1.保证该点是有颜色的 2.向右或向下(坐标范围合法) 2.1有颜色,与该点比较,相同无需操作,不同花费1金币 2.2无色,判断该点是否已经使用过法术,有则跳过 没有,则分两种颜色搜索回溯 3.结束条件,无路可走或到达终点(success) */.原创 2021-04-21 19:51:12 · 134 阅读 · 0 评论 -
小球排列
#include<iostream>using namespace std;int clo[3];//0,1,2int ans=0;void backtrack(int pre,int num){ /*截止条件: 1.剩余另外两种颜色小球数目<num&&>0*/ //cout<<"function pre: "<<pre<<" num: "<<num<<endl; if(clo[0].原创 2021-04-17 19:52:33 · 160 阅读 · 0 评论 -
作物杂交
//wrong answer#include<iostream>#include<vector>using namespace std;struct seed{ int seed2; int target;};vector<int> current;vector< vector<seed> > s;vector<int> timeofs;vector<bool> havek;int N,M,K.原创 2021-04-15 21:19:30 · 140 阅读 · 0 评论 -
解码方法
class Solution {public: int numDecodings(string s) { if (s[0] == '0') return 0; vector<int> dp(s.size()+1); dp[0]=1;dp[1]=1; for (int i =1; i < s.size(); i++) { if (s[i] == '0')//1.s[i]为0的情况 .原创 2021-04-11 17:56:07 · 204 阅读 · 0 评论 -
走迷宫
#include<iostream>#include<set>#include<vector>using namespace std;const int r=1e4+7;long long w[101][101];int n,m;set<long long> weight;long long sum=0;int dx[2]={0,1};int dy[2]={1,0};void backtrack(int x,int y){ .原创 2021-04-10 10:46:28 · 54 阅读 · 0 评论 -
最长有效括号
//缺陷:只能针对层层嵌套的括号#define invalid -1class Solution {public: bool ismatch(string& s,int i,int j) { if(s[i]=='('&&s[j]==')') return true; else return false; } int longestValidParentheses(s.原创 2021-04-09 22:06:04 · 81 阅读 · 0 评论 -
五连珠
#include<stdio.h>#include<string.h>int a[50][50],b[50][50],c[30];int judge(int tep[][50]){ int i,j; int flag=1; for(i=0;i<5;i++) if(tep[0][i]!=0) flag=0; if(flag) return 1; flag=1; for(i=0;i<5;i++) if(tep[1][i]!=0) flag=0.原创 2021-04-05 21:47:36 · 177 阅读 · 0 评论 -
螺旋矩阵
#include<iostream>#include<string>#include<memory.h>using namespace std;char m[80][80];enum Direction{Right=1,Up,Left,Down};int calculr(int n){ int r=1; while(true) { if(n<=r*r&&n>(r-1)*(r-1)) .原创 2021-04-05 19:41:47 · 69 阅读 · 0 评论 -
计算相对分子质量
#include<iostream>#include<map>#include<string>#include<stack>using namespace std;map<string,int> elem;int calcul(string& s){ stack<long long> chem; //分别储存括号内数值和括号(用插入0来代替) for(int i=0;i<s.size.原创 2021-04-05 10:25:53 · 741 阅读 · 0 评论 -
消减整数
#include<iostream>#include<algorithm>#include<vector>using namespace std;vector<int> cnt;void timeofH(long H,long count,long n){ if(H==0) { cnt.push_back(count); }else if(H>0) { if(H<n) .原创 2021-04-05 08:56:36 · 101 阅读 · 0 评论 -
接雨水
#include<vector>class Solution {/** curwater->现有存水,tolwater->总计存水* 1.查找第一个大于0的点start作为起点* 2.判断start紧接下来的点是否小于该点* 2.1若是,则计算curwater增加,并标记为true* 2.1.1接着判断,小于则增加现有水,大于则结束查找,tolwater增加* 2.2若不是,则该点作为新的start计算*/public: int sto.原创 2021-04-02 22:09:14 · 64 阅读 · 0 评论 -
校门外的树
#include<iostream>#include<algorithm>#include<vector>using namespace std;struct area{ int left; int right;};bool Cmp(area a, area b){ if (a.left == b.left) return a.right < b.right; else return a.left < b.left;}//排.原创 2021-04-01 23:48:50 · 48 阅读 · 0 评论 -
苹果摘陶陶
#include<iostream>#include<algorithm>using namespace std;bool Cmp(int a, int b){ return a < b;}int main(){ int n, m; int nsize; int msize; cin >> n >> m; nsize = n; msize = m; int* nptr = new int[n]; int* mptr = n.原创 2021-04-01 21:52:25 · 81 阅读 · 0 评论 -
储蓄计划(未完全通过)
#include<iostream>using namespace std;int a[13];int main(){ int sum=0,sum2=0; for(int i=0;i<12;i++) { cin>>a[i]; } for(int i=0;i<12;i++) { sum+=300; sum-=a[i]; if(sum<0) .原创 2021-04-01 21:31:20 · 54 阅读 · 0 评论 -
乒乓球
#include<string>#include<iostream>#include<cmath>#include<algorithm>using namespace std;class score11{private: int score1; int score2;public: score11() { score1 = 0; score2 = 0; } void PrintGame() { cout <&l.原创 2021-03-31 22:56:01 · 82 阅读 · 0 评论 -
N皇后问题(递归与非递归版本)
#include<iostream>#include <algorithm>using namespace std;/* n个皇后 1.不在同一行 2.不在同一列 3.45度的斜线上,行号差值至少为3 横坐标0~~n-1 纵坐标0~~n-1 每个数只能用一次,枚举 固定x坐标,变换y坐标,全排列,检查是否符合条件*/class Point{ int* Px; int* Py; int n;public: Point() { cin >.原创 2021-03-28 09:20:45 · 265 阅读 · 0 评论 -
灌溉(队列实现)
/* n行 m列 t出水管 k分钟 1.接收初始水管位置,并初始化计数器为t 2.将初始水管位置入队及每轮结束标志(0,0) 3.依次出队,按方向循环 3.1判断是否合法,合法则计数器加一且入队,不合法则跳过 3.2直至遇到(0,0)表示一轮结束 4.判断是否达到k轮 补:创建二维数组,查看灌溉状态*/#include<iostream>#include<queue>using namespace std;int dx[4] = {-1,1,0,0};.原创 2021-03-25 23:27:38 · 72 阅读 · 0 评论 -
跑步锻炼(有差错)
/* 2000.1.1 星期六 至2020.10.1 星期四 周一或月初 2千米 其余 1千米 1.时间类包含星期几 2.增加,日期增加,星期几增加 2.1增加时注意闰余年,月份天数 3.判断星期几累加 4.直到目标日期*/#include<iostream>using namespace std;int day[2][13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31.原创 2021-03-22 21:52:31 · 93 阅读 · 0 评论 -
回文日期
#include<iostream>#include<string>using namespace std;int day1[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };int day2[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };/* 解题思路: 1.按回文规则得到新数组 2.判断得到新数组日期是否合法 2.1第一次需判断是否在原日期之后 3.年份.原创 2021-03-21 20:51:35 · 108 阅读 · 0 评论