![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
DC虫虫
这个作者很懒,什么都没留下…
展开
-
608F(待解决)迷宫问题
题目http://codeup.cn/problem.php?cid=100000608&pid=5问题:递归边界考虑的不完善。有太多考虑不完善的地方。但是好歹把大概框架写出来了。#include<stdio.h>int a[16][16],b[16][16]={0},n,m;int cnt=0;void DFS(int stx,int sty,int ex,int ey){ if(stx==n||sty==m||(stx==ex&&sty==ey)){原创 2021-03-13 21:59:43 · 60 阅读 · 0 评论 -
608E出入栈卡特兰数不理解
在我看来只有一种出入栈方式啊,那就是1234入栈,4321出栈。明明我之前理解的,生气#include<stdio.h>int n,cnt;void DFS(int x,int y,int ans){ if(ans==n){ cnt++; return; } if(x>0) DFS(x-1,y+1,ans); if(y>0) DFS(x,y-1,ans+1);}int main(){ scanf("%d",&n); cnt=0; DFS(n,0原创 2021-03-13 21:27:53 · 74 阅读 · 0 评论 -
608D八皇后细节
问题都放在注释里了,还是对问题认识不深#include<stdio.h>#include<math.h>int n,hash[11]={false},a[11],cnt=0;void DFS(int index){ if(index==n+1){//n+1要记清 int i; for(i=1;i<n;i++){ printf("%d ",a[i]); } printf("%d\n",a[i]); cnt++; return; } in原创 2021-03-13 20:53:17 · 58 阅读 · 0 评论 -
存疑608C很大的素数表
题目http://codeup.cn/problem.php?cid=100000608&pid=2问题1,// if(nowk>k||index==n) return; 这句竟然不能放开头。我猜想是index的问题。ac代码:#include<stdio.h>#include<math.h>int n,k,cnt,a[21];int isprime(int t){ if(t==1||t==0) return false; int i,sqr=(int原创 2021-03-13 20:20:40 · 122 阅读 · 0 评论 -
608B组合非递归
那就按次序一个排列一个排列的推导。不可能按r循环,所以只能按排列数推导。#include<stdio.h>int n,r,a[21];void print(int a[],int r){ int i; for(i=1;i<r;i++){ printf("%d ",a[i]); } printf("%d\n",a[i]);}int next_p(){ int i=0; if(a[r]<n){//最后一位 a[r]++; }else{ int i=原创 2021-03-13 11:15:59 · 42 阅读 · 0 评论 -
全排列哈希DFS
可回溯选择,但是又只能选择未选择过的数。所以需要hash做标记。因为可回溯,所以需要从头遍历。所以Index此时是nowk的作用,n既是K,又是n。#include<stdio.h>int n,temp[10],hash[11]={0};void DFS(int index){ if(index>n){ int i; for(i=1;i<n;i++){ printf("%d ",temp[i]); } printf("%d\n",temp[i]);原创 2021-03-13 10:28:42 · 90 阅读 · 0 评论 -
8.1DFS选数问题深搜参数index忘+1
问题:DFS(index+1,nowk,sum,sumsqu); 又忘了使index+1。在深搜时,要不index+1,要不nowk+1,总得有一个退出条件。注意:ans=temp; 竟然有这种赋值方式。#include<cstdio>#include<vector>using namespace std;//从n个数选k个数使其和为x,如有多个,则选平方和最大方案 int n,k,x,maxsumsqu=-1,a[30];vector<int> te原创 2021-03-13 09:44:56 · 110 阅读 · 0 评论 -
8 -1深搜DFS背包问题
问题:死循环。DFS(index+1,sumw,sumc); 最初这里写的是index。#include<stdio.h>int V,n,maxvalue=0;int c[20],w[20]; void DFS(int index,int sumw,int sumc){ if(index==n){ if(sumw<=V&&sumc>maxvalue) maxvalue=sumc; return; } DFS(index+1,sumw+w[inde原创 2021-03-13 09:02:29 · 110 阅读 · 0 评论 -
存疑607E(已解决)头插法
题目http://codeup.cn/problem.php?cid=100000607&pid=4#include<stdio.h>#include<stdlib.h>struct node{ int data; node *next;}; int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n==0){ printf("list is empty\n"); break; }原创 2021-03-12 21:22:25 · 95 阅读 · 0 评论 -
存疑607D(已解决)注意点
题目http://codeup.cn/problem.php?cid=100000607&pid=3注意点:1,scanf("%d",&temp); i++; 循环内多输入一个数记得循环内使i自增一次。2,node *p=(node*)malloc(sizeof(node)); node *t=(node*)malloc(sizeof(node)); 每次新增结点都要新申请空间。不是修改P就可以的,p指向的还是原来的结点。3,pre->next=p; pre=pre->n原创 2021-03-12 20:54:56 · 112 阅读 · 0 评论 -
存疑607C(已解决)排序为什么只输出最后一个元素
https://paste.ubuntu.com/p/9THXRF6X27/输入两组数据,插入到链表,直接输出。不应该输出整个链表吗?为什么只输出最后一个?原创 2021-03-12 18:24:21 · 102 阅读 · 0 评论 -
存疑607B(已解决)链表输入时排序
题目http://codeup.cn/problem.php?cid=100000607&pid=1问题:if(q==NULL) preq-=p;//末尾 应改为if(q==NULL) preq->next=p;//末尾注意:若链表无序则可边输入边修改。#include<stdio.h>#include<stdlib.h>struct Node{ int num; int grade; Node* next;};int main(){ int n原创 2021-03-12 17:26:24 · 63 阅读 · 0 评论 -
存疑607A(已解决)操作没有输出就结束了
题目http://codeup.cn/problem.php?cid=100000607&pid=0问题:操作没有输出就结束了,以及输入M=4,但输入3个操作就结束了。代码:#include<stdio.h>#include<stdlib.h>struct Node{ int data; Node* next; };Node* create(int array[],int n){//创建链表 Node* head=(Node*)malloc(sizeof原创 2021-03-12 14:34:24 · 67 阅读 · 0 评论 -
存疑PATA1052(已解决)无效结点处理以及结构体成员作用
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805425780670464问题:两个测试点错误。已做修改:flag,address,cmp的用处。一个:printf("%d %05d\n",n,node[0].address); n改成cnt,因为有无效结点的存在。3分二:if(cnt==0) printf("0 -1\n"); else{} 特判结点均无效的情况。1分#include<cstdio>原创 2021-03-12 11:46:03 · 110 阅读 · 0 评论 -
存疑PATA1032(已解决)静态链表超时
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920问题:一个测试点超时,一个测试点答案错误。if(i!=-1) printf("%5d\n",i); 改成05d超时问题:双循环检查。改进:flag看是否在第一个单词中出现。(已解决)#include<stdio.h>#include<stdlib.h>struct Node{ char data; int nex原创 2021-03-12 11:09:15 · 94 阅读 · 0 评论 -
存疑603A(已解决)pair使用
题目http://codeup.cn/problem.php?cid=100000603&pid=0用pair处理会出现问题。t->first;->符号应用.处理。如:t.first就对了#include<cstdio>#include<map>using namespace std;int main(){ pair<double,double> t,a,b,c; double x1,y1,x2,y2,x3,y3; int n; w原创 2021-03-11 15:52:28 · 100 阅读 · 0 评论 -
存疑602B(已解决)括号匹配
题目http://codeup.cn/problem.php?cid=100000602&pid=1加flag=1处理了样例()}的问题,还是答案错误。#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<stack>#include<map>using namespace std;string str;stac原创 2021-03-11 15:03:58 · 89 阅读 · 0 评论 -
存疑602A(已解决)中缀后缀表达式
http://codeup.cn/problem.php?cid=100000602&pid=0问题:为什么会输出那么多,难道cin是空格便终止?#include<cstdio>#include<stack>#include<string>#include<iostream>using namespace std;stack<double> stdata;stack<char> stopt;double cal原创 2021-03-08 16:13:37 · 83 阅读 · 0 评论 -
存疑601A(半解决)queue与sort的区别以及如何定义stl容器的优先级
题目http://codeup.cn/problem.php?cid=100000601&pid=0代码2:以结构体来比较。所以,queue与sort的区别在哪里?排序之余还可以插入删除?不像sort的排序是另外的?在这里插入代码片代码1:嫌结构体排序,查找麻烦,直接用map<string,int>mp,在map插入队列时,简直一团糟。另外,mp->first,mp->second的使用有问题。所以set,map等stl插入队列时的基本单位是什么?以size为标准比原创 2021-03-07 21:14:34 · 182 阅读 · 0 评论 -
存疑600A(已解决)交换最大最小值的坑
题目http://codeup.cn/problem.php?cid=100000600&pid=0注意:1.看着简单,但坑就是不能同时查找最大最小值id。比如10 9 8 7 6 5 4 3 1 2.同时查找id结果的第一位会是2(先交换最小,再交换最大)。2.int max=INT_MIN,min=INT_MAX; 初始值要设置正确。#include<stdio.h>#include<limits.h>int a[10];void print(){原创 2021-03-07 19:47:48 · 74 阅读 · 0 评论 -
存疑PATA1071(已解决)超时+输入无法停止+map
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805398257647616问题:两个测试点超时。本地自测时输入无法终止。#include<cstdio>#include<map>#include<string>using namespace std;int judge(char ch){ if((ch<='z'&&ch>='a')||(ch<原创 2021-03-07 18:14:51 · 112 阅读 · 0 评论 -
存疑598A得根据小数点分很多情况
题目http://codeup.cn/problem.php?cid=100000598&pid=0难点:小数点移动和按位相加。科学计数法都是简单的了#include<cstdio>#include<string>#include<iostream>#include<algorithm>using namespace std;void checke(string a){ int k=a.find('e'),e=0; if(k==st原创 2021-03-07 17:01:02 · 53 阅读 · 0 评论 -
存疑PATA1060(已解决)输入有问题string
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872注:string中str.length()与s[0],s.erase()搭配比iterator it=begin()要简便代码:#include<string>#include<cstdio>#include<iostream>using namespace std;void delet(string原创 2021-03-07 16:20:53 · 99 阅读 · 0 评论 -
存疑PATA1063(已解决)超时set求交并差集
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928代码:#include<cstdio>#include<algorithm>#include<set>using namespace std;int main(){ int n,cnt,t,k; scanf("%d",&n); set<int> a[n+1];//n个集合 f原创 2021-03-07 14:15:21 · 88 阅读 · 0 评论 -
存疑PATA1039(已解决)vector+string三种方法
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416三种方法:法一:正确。法二:在法一基础上把hash数组映射至vector数组,减小vector规模。本地IDE正确,但pat编译错误。法三:vector+string。课程输入没问题,输入待查询学生时便出现错误。法一:#include<cstdio>#include<cstring>#include<vec原创 2021-03-07 12:33:22 · 131 阅读 · 0 评论 -
存疑201503(已解决)空行
https://paste.ubuntu.com/p/xypYqXjDKV/原创 2021-03-06 18:40:30 · 102 阅读 · 0 评论 -
存疑201703(已解决)map的使用
问题:https://paste.ubuntu.com/p/KGkP92nVGk/原创 2021-03-06 18:28:14 · 405 阅读 · 0 评论 -
存疑201602(已解决)输出乱码
问题及代码https://paste.ubuntu.com/p/xhYcb4tvwN/原创 2021-03-02 15:41:32 · 97 阅读 · 0 评论 -
存疑201702(已解决)输出未定义变量
问题:https://paste.ubuntu.com/p/BXXCgngqpz/原创 2021-03-02 13:27:45 · 515 阅读 · 0 评论 -
存疑592C(半解决)素数表范围
http://codeup.cn/problem.php?cid=100000592&pid=2问题:为什么不通过#include<stdio.h>#include<math.h>int p[100010]={0};int prime[100010],pnum=0;int is_prime(int n){ if(n==1) return 0; int i,sqr=(int)sqrt(1.0*n); for(i=2;i<=sqr;i++){ if(n原创 2021-02-28 16:16:51 · 160 阅读 · 0 评论 -
592A(已解决)完数被糊弄
题目http://codeup.cn/problem.php?cid=100000592&pid=0出在质因子这章,容易想复杂#include<stdio.h>#include<math.h>/*int prime[100010],num=0;int is_prime(int n){ if(n==1) return 0; int sqr=(int)sqrt(1.0*n); int i; for(i=2;i<=sqr;i++){ if(n%i==0原创 2021-02-27 22:32:02 · 69 阅读 · 0 评论 -
存疑PATA1059(已解决)哈希素数表范围
题目https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488一句话让我漏洞百出:else if(!p[n]) printf("%d=%d",n,n);素数表100010是够int范围内查询的,但哈希表int型范围则太大了。所以哈希表能不弄就不弄了。#include<stdio.h>#include<math.h>int p[100010]={0};int prime[10原创 2021-02-27 22:03:33 · 90 阅读 · 0 评论 -
存疑591C(半解决)int范围双指针就通过
http://codeup.cn/problem.php?cid=100000591&pid=2我把数组范围写成8位就是运行出错,改成7位就是答案错误。#include<stdio.h>int p[1000010]={0};int prime[1000010],num=0;void Find_Prime(){ int i; for(i=2;i<1000010;i++){ if(!p[i]){ prime[num++]=i; int j; for(原创 2021-02-27 17:31:57 · 129 阅读 · 0 评论 -
存疑591A素数(已解决)不知道哪里用到了C++
问题https://paste.ubuntu.com/p/b5Hy4VqvW9/#include<stdio.h>#include<string.h>int p[10001];int prime[10001],num=0;int prime1[10000],cnt=0;// void Find_Prime(int n){ int i; for(i=2;i<n;i++){ if(!p[i]){ prime[num++]=i; if(i%10==1)原创 2021-02-27 16:11:31 · 57 阅读 · 0 评论 -
patb1040递推
#include<stdio.h>#include<string.h>int main(){ char str[100010]; gets(str); int len=strlen(str); int numP[len],numT[len]; int i; long long int sum=0; for(i=0;i<len;i++){ if(i){ if(str[i]=='P'){ numP[i]=numP[i-1]+1; }else原创 2021-02-25 21:46:12 · 239 阅读 · 0 评论 -
4_6_1序列合并139twopointers
#include<stdio.h>int merge(int a[],int b[],int c[],int n,int m){ int i=0,j=0,index=0; while(i<n&&j<m){ if(a[i]<=b[j]){ c[index++]=a[i]; i++; }else{ c[index++]=b[j]; j++; } } while(i<n){ c[index++]=a[i++];原创 2021-02-25 21:45:21 · 52 阅读 · 0 评论 -
4_7_3随机选择算法第k大
#include<stdio.h>#include<stdlib.h>#include<time.h>#include<math.h>//round 函数 //#include<algorithm>using namespace std;上面的全用cstdio,cstdlib,ctime.//swap.,min,max,abs函数- /**/void swap(int *a,int *b){ int temp=*a; *a=*b;原创 2021-02-25 21:44:39 · 90 阅读 · 0 评论 -
(210702存疑)4_6_3快速排序随机划分
#include<stdio.h>#include<stdlib.h>#include<time.h>#include<math.h>void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp;}int randPartition(int a[],int left,int right){ int p=round(1.0*rand()/RAND_MAX*(right-left)+left);原创 2021-02-25 21:43:56 · 63 阅读 · 2 评论 -
4_6_2归并排序非递归141
#include<cstdio>#include<algorithm>using namespace std;int min(int a,int b){ if(a<=b) return a; else return b;}void merge(int a[],int L1,int R1,int L2,int R2){ int i=L1,j=L2,index=0; int temp[R2+R1-L1-L2+2]; while(i<=R1&&原创 2021-02-25 21:43:06 · 60 阅读 · 1 评论 -
存疑4_6_2(已解决)归并排序递归140
#include<stdio.h>void merge(int a[],int L1,int R1,int L2,int R2){// int i=L1,j=L2,index=0;// int temp[R2+R1-L1-L2+2]; while(i<=R1&&j<=R2){// if(a[i]<=a[j]){// temp[index++]=a[i++]; }else{ temp[index++]=a[j++];// } }原创 2021-02-25 21:42:14 · 43 阅读 · 0 评论