进阶课程
mozeli
这个作者很懒,什么都没留下…
展开
-
hdu7108哈希
添加链接描述 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+5; int t,n; char ch[maxn]; ll s; map<pair<int,int>,int> pos; int main() { ll x,y; scanf("%d",&t); while(t--){ x=y=0; s=0; while(!pos原创 2021-09-01 15:59:41 · 96 阅读 · 0 评论 -
hdu1269强连通分量(kosaraju算法)
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=1e4+5; int a[maxn],b[maxn]; vector<int> p[maxn],q[maxn];//原图,反向图 int vis[maxn]; int k; void dfs1(int x){ vis[x]=1; for(int i=0;i<p[x].size();i++){ if(vis[p[x][i]]==0) df原创 2021-08-19 15:50:13 · 83 阅读 · 0 评论 -
hdu4745
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=2005; int a[maxn]; int dp[maxn][maxn]; int main() { int n; while(scanf("%d",&n)!=EOF){ if(n==0) break; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); a[i+n]=a[i];原创 2021-08-17 19:27:07 · 51 阅读 · 0 评论 -
hdu4283
添加链接描述 #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int d[105],sum[105]; int dp[105][105]; int main() { int t; cin>>t; int c=1; while(t--){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>d[i]; sum[1]原创 2021-08-17 16:13:10 · 50 阅读 · 0 评论 -
hdu5115
添加链接描述 #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int a[205],b[205]; int dp[205][205]; int main() { int t; cin>>t; int c=1; while(t--){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int原创 2021-08-17 14:51:15 · 79 阅读 · 0 评论 -
zjhu1040石子合并,区间dp(迭代+记忆化dfs)
添加链接描述 法一:迭代 #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int dp[105][105]; int w[105][105],a[105]; int n; int main() { int t; cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } m原创 2021-08-17 10:17:36 · 71 阅读 · 0 评论 -
hdu3336
添加链接描述 #include<bits/stdc++.h> using namespace std; const int mode=10007; const int maxn=200005; char x[maxn]; int nexts[maxn]; int n; void getnext(char* x){ nexts[1]=0; int k=0; for(int i=2;i<=n;i++){ while(k!=0&&x[k+1]!=x[i]) k=next原创 2021-08-16 14:56:02 · 36 阅读 · 0 评论 -
hdu2549
添加链接描述 #include<bits/stdc++.h> using namespace std; int main() { char x[10],c; int n,t; cin>>t; while(t--){ int ans; while((c=getchar())!='.') ans=0; while((c=getchar())!=' ') x[ans++]=c; cin>>n; if(n>ans) cout<<"0"原创 2021-08-15 20:23:20 · 132 阅读 · 0 评论 -
hdu2087kmp
#include<bits/stdc++.h> using namespace std; int p[1001]; char c1[1001],c2[1001]; int len1,len2; void pre(){ p[0]=0; p[1]=0; for(int i=1;i<len2;i++){ int j=p[i]; while(j>0&&c2[j+1]!=c2[i+1]) j=p[j]; if(c2[j+1]==c2[i+1]) p[i+1]=原创 2021-08-15 16:19:11 · 54 阅读 · 0 评论 -
hdu1043康托展开+bfs
添加链接描述 #include<bits/stdc++.h> using namespace std; const int inf=0x3f3f3f3f; const int maxn=4e5+1; int f[10]; int vis[maxn],path[maxn],path2[maxn]; void init(){ f[0]=1; for(int i=1;i<=9;i++) f[i]=f[i-1]*i; } int kt(string s){//康托 int res=0;原创 2021-08-11 19:49:53 · 89 阅读 · 0 评论 -
hdu1496
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=5e4+5; int f[maxn],g[maxn]; int hashs(int k){ int t=k%maxn; if(t<0) t+=maxn; while(f[t]&&g[t]!=k) t=(t+1)%maxn; return t; } int main() { int sum,a,b,c,d; int t[101];原创 2021-08-11 15:33:48 · 87 阅读 · 0 评论 -
hdu1425哈希(桶排序)
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; const int mm=5e5; int a[maxn],b[maxn]; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF){ memset(b,0,sizeof(b)); int k; for(int i=1;i<=n;i++){ scanf("原创 2021-08-10 15:38:34 · 76 阅读 · 0 评论 -
hdu2202求最大三角形面积(凸包)
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=5e4+5; struct node{ double x,y; }p[maxn],s[maxn]; double dis(node a,node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } double X(node p1,node p2,node p3){ return (p2.x原创 2021-08-10 14:39:08 · 72 阅读 · 0 评论 -
hdu1392求凸包周长
添加链接描述 #include<bits/stdc++.h> using namespace std; struct node{ double x,y; }p[101],s[101]; double dis(node a,node b){//求距离 node t; t.x=a.x-b.x; t.y=a.y-b.y; return sqrt(t.x*t.x+t.y*t.y); } double X(node p1,node p2,node p3){//叉乘 return (p2.x-p原创 2021-08-10 11:11:09 · 57 阅读 · 0 评论 -
hdu2036计算多边形面积
添加链接描述 #include<bits/stdc++.h> using namespace std; int x[1000],y[1000]; int sum(int p1,int p2){ double s1=0; s1=x[p1]*y[p2]-x[p2]*y[p1]; return s1; } int main() { int n; while(scanf("%d",&n)!=EOF){ if(n==0) break; for(int i=0;i<n;i++原创 2021-08-09 15:36:16 · 124 阅读 · 0 评论 -
hdu2108计算几何(判断凹凸)
添加链接描述 #include<bits/stdc++.h> using namespace std; int n; int x[1000],y[1000]; int find(int p1,int p2,int p3){ return (x[p1]-x[p2])*(y[p1]-y[p3])-(x[p1]-x[p3])*(y[p1]-y[p2]); } int main() { while(scanf("%d",&n)!=EOF){ if(n==0) break; for(i原创 2021-08-09 15:14:56 · 66 阅读 · 0 评论 -
hdu2793
#include<bits/stdc++.h> #define mode 1000000007 using namespace std; typedef long long ll; ll a,b; struct mm{ ll a[4][4]; }ori,res; mm init(){ mm E; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(i==j) E.a[i][j]=1; else E.a[i][j]=0;原创 2021-08-09 10:34:09 · 88 阅读 · 0 评论 -
hdu6470
添加链接描述 #include<bits/stdc++.h> #define mode 123456789 using namespace std; typedef long long ll; ll n,t; struct mm{ ll a[6][6]; }ori,res; mm init(){ mm E; for(int i=0;i<6;i++){ for(int j=0;j<6;j++){ if(i==j) E.a[i][j]=1; else E.a[i]原创 2021-08-03 10:56:39 · 166 阅读 · 0 评论 -
hdu1757
添加链接描述 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll k,m; struct mm{ ll a[11][11]; }aa,bb; mm init(){ mm E; for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ if(i==j) E.a[i][i]=1; else E.a[i][j]=0; } } return原创 2021-08-02 14:03:39 · 44 阅读 · 0 评论 -
hdu1575矩阵快速幂
添加链接描述 #include<bits/stdc++.h> #define mode(x) x%9973 using namespace std; typedef long long ll; ll n,k; struct maps{ ll g[11][11]; }aa; maps init(){ maps E; for(ll i=0;i<n;i++){ for(ll j=0;j<n;j++){ if(i==j) E.g[i][j]=1; else E.g[i]原创 2021-08-02 09:37:28 · 48 阅读 · 0 评论 -
hdu1698
添加链接描述 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+5; int a[maxn]; struct node{ int val; int lazy; }st[maxn<<2]; void pushup(int rt){ st[rt].val =st[rt<<1].val +st[rt<<1|1].val ; } void build(int l,int r,int原创 2021-08-01 14:55:36 · 64 阅读 · 0 评论 -
hdu3308
添加链接描述 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+5; int a[maxn]; int n,m,t; struct segtree{ int maxs; int lmax,rmax; }st[maxn<<2]; void pushup(int rt,int l,int r){ st[rt].lmax =st[rt<<1].lmax ; st[rt原创 2021-08-01 10:33:47 · 33 阅读 · 0 评论 -
hdu1754线段树
添加链接描述 #include<bits/stdc++.h> using namespace std; int n,m; const int maxn=2e5+5; int a[maxn]; struct segtree{ int val; }st[maxn<<2]; void pushup(int rt){ st[rt].val =max(st[rt<<1].val ,st[rt<<1|1].val ); } void build(int l,int r原创 2021-07-30 16:19:21 · 50 阅读 · 0 评论 -
hdu2544dij
添加链接描述 #include<bits/stdc++.h> #define inf 99999999 using namespace std; int vis[105],t[105],mt[105][105]; int m,n; void dij(){ for(int i=1;i<=n;i++){ t[i]=mt[1][i]; } for(int i=1;i<=n-1;i++){//找n-1轮 int mins=inf; int k; for(int j=1原创 2021-07-30 10:21:38 · 67 阅读 · 0 评论 -
hdu2647
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=1e4+5; int res[maxn],in[maxn]; vector<int> g[maxn]; int topsort(int n){ queue<int> q; for(int i=1;i<=n;i++) if(in[i]==0) q.push(i); int c=0;//标记总操作的结点数,判断是否有环 wh原创 2021-07-28 18:51:31 · 56 阅读 · 0 评论 -
hdu1285拓扑排序
添加链接描述 #include<bits/stdc++.h> using namespace std; const int maxn=505; int g[maxn][maxn],res[maxn],in[maxn];//g为邻接矩阵,res记录最后结果,in记录入度 void topsort(int n){ int k=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){//从小到大 if(in[j]==0){ re原创 2021-07-28 15:35:22 · 62 阅读 · 0 评论 -
hdu1556差分数组
添加链接描述 #include<bits/stdc++.h> using namespace std; int n; int a,b; const int maxn=1e5+5; int c[maxn]; void add(int p,int x){ while(p<=n) c[p]+=x,p+=p&-p; } int ask(int p){ int res=0; while(p) res+=c[p],p-=p&-p; return res; } int main(原创 2021-07-28 14:34:30 · 53 阅读 · 0 评论 -
hdu2689逆序数
添加链接描述 #include<bits/stdc++.h> using namespace std; int n; int a[1005]; void update(int i,int val){//更新 while(i<=n){ a[i]+=val; i+=i&-i; } } int sum(int i){//求区间[1,i]所有元素的和,前缀和 int ret=0; while(i>0){ ret+=a[i]; i-=i&-i; }原创 2021-07-23 16:12:39 · 45 阅读 · 0 评论 -
hdu1196
添加链接描述 #include<bits/stdc++.h> using namespace std; int main() { int a; while(scanf("%d",&a)!=EOF){ if(a==0) break; printf("%d\n",a&-a); } return 0; }原创 2021-07-23 15:28:28 · 44 阅读 · 0 评论 -
hdu1166树状数组
添加链接描述 #include<bits/stdc++.h> using namespace std; int t,n; int r,l; const int maxn=51000; int a[maxn]; int ai,aj; void update(int i,int val){//更新节点值 while(i<=n){ a[i]+=val; i+=(i&(-i)); } } int sum(int i){//查询前缀和 int res=0; while(原创 2021-07-23 15:20:07 · 34 阅读 · 0 评论 -
hdu3351
添加链接描述 #include<bits/stdc++.h> using namespace std; int change(string s){ int ans=0;//ans标记改变方向的右括号 int l=0;//l标记左括号的数量 for(int i=0;i<s.size();i++){ char c=s[i]; if(c=='{'){ l++;//如果是左括号,l++ } else{ if(l>0) l--;//如果左括号数量>原创 2021-07-23 09:55:16 · 51 阅读 · 0 评论 -
hdu1716
添加链接描述 #include<bits/stdc++.h> using namespace std; int num[5]; int a,b,c,d; int main() { int t=0;//t判断是否为第一组输入,若不是第一组,输出前需要先输出换行 while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF){ if(a==0&&b==0&&c==0&&d==0) brea原创 2021-07-22 19:49:59 · 41 阅读 · 0 评论 -
hdu1027全排列next_permutation()+hash逆康托展开
添加链接描述 #include<bits/stdc++.h> using namespace std; int n,m; int a[1005]; int main() { while(cin>>n>>m){ memset(a,0,sizeof(a)); for(int i=0;i<n;i++){ a[i]=i+1; } for(int i=1;i<m;i++){最开始已经是第一个最小序列,现求第m个最小序列 next_perm原创 2021-07-22 19:16:58 · 152 阅读 · 0 评论 -
hdu1004map
添加链接描述 #include<bits/stdc++.h> using namespace std; int n; int main() { map<string,int> bal; string col,maxc; while(cin>>n){ if(n==0) break; bal.clear(); for(int i=0;i<n;i++){ cin>>col; bal[col]++; } map<str原创 2021-07-22 16:40:29 · 28 阅读 · 0 评论 -
hdu1022
添加链接描述 #include<bits/stdc++.h> using namespace std; int n; char o1[1010],o2[1010]; stack<char> st;//根据题目输入要求,需要定义成字符型 queue<string> q;//队列用于存放in,out int main() { while(cin>>n){ //清空栈和队列 while(!st.empty()) st.pop(); while(!q.原创 2021-07-22 16:14:57 · 28 阅读 · 0 评论 -
hdu1412 STL(set)
添加链接描述 #include<bits/stdc++.h> using namespace std; int n,m; int a,b; int main() { while(cin>>n>>m){ set<int> st; for(int i=0;i<n;i++){ cin>>a; st.insert(a); } for(int i=0;i<m;i++){ cin>>b; st.原创 2021-07-22 15:37:03 · 58 阅读 · 0 评论 -
hdu1085
添加链接描述 #include<bits/stdc++.h> using namespace std; int a[8001],b[8001],c[8001]; int d[3]={1,2,5}; int main() { int n1,n2,n3,i,j,k; while(cin>>n1>>n2>>n3){ if(n1==0&&n2==0&&n3==0) break; int m=n1+n2*2+n3*5; f原创 2021-04-12 19:01:02 · 34 阅读 · 0 评论 -
hdu1398
添加链接描述 #include<bits/stdc++.h> using namespace std; int a[301],b[301]; int main() { int n,i,j,k; for(i=0;i<301;i++){ a[i]=0; b[i]=0; } for(i=0;i<301;i++){ a[i]=1; } for(i=2;i<301;i++){ for(j=0;j<301;j++) for(k=0;k+j<30原创 2021-04-11 13:33:34 · 67 阅读 · 0 评论 -
hdu1028母函数
添加链接描述 #include<bits/stdc++.h> using namespace std; int a[121],b[121]; int main() { int n,i,j,k; for(i=0;i<121;i++){ a[i]=0; b[i]=0; } for(i=0;i<121;i++){ a[i]=1; } for(i=2;i<121;i++){ for(j=0;j<121;j++) for(k=0;k+j<12原创 2021-04-11 11:21:50 · 60 阅读 · 0 评论