上海高端做网站wordpress分页标题

当前位置: 首页 > news >正文

上海高端做网站,wordpress分页标题,阿里巴巴网站建设要多少钱,怎么给网站做第三方app日期统计 小蓝现在有一个长度为 100 的数组#xff0c;数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 …日期统计 小蓝现在有一个长度为 100 的数组数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3 现在他想要从这个数组中寻找一些满足以下条件的子序列 1. 子序列的长度为 8 2. 这个子序列可以按照下标顺序组成一个 yyyymmdd 格式的日期并且 要求这个日期是 2023 年中的某一天的日期例如 2023090220231223。 yyyy 表示年份mm 表示月份dd 表示天数当月份或者天数的长度只有一位时需要一个前导零补充。 请你帮小蓝计算下按上述条件一共能找到多少个不同的 2023 年的日期。 对于相同的日期你只需要统计一次即可。 本题的结果为一个整数在提交答案时只输出这个整数输出多余的内容将无法得分。 #includebits/stdc.h using namespace std; int ans;//合法日期的总数   bool vis[20240000];//记录这个合法日期或是错误日期是否出现过 初始化为0若为1则直接返回false  int a[100];//记录输入的数组  bool check(int  date){//检车这个日期是否是合法的日期           if(vis[date])return false;//之前出现过这个日期                vis[date]1;//若是没出现过则把该日期标记为1           //判断这个日期是否为合法的日期      int mmdate/100%100;//取日期的月份      int dddate%100;//日期天数      if(mm1||mm12)return false;//如过月数不是1~12返回false      if(mm1||mm3||mm7||mm8||mm10||mm12){//1,2,5,7,8,10,(腊)12三十一天不差判断月份为这些时日期是否在1~31若果是则然会true          if(dd1dd31)return true;              }else if(mm2){//2023年为闰年所以有28天判断月份为2时日期是否在1~28如果是则返回true,year % 4 0 year % 100 ! 0) || (year % 400 0)判断闰年         if(dd1||dd28)             return true;     }else if(dd1mm30){//取余月份天数为20天看是否为1~30如果是则返回true          return true;     }else{          return false;//其余情况则返回false      }           } void dfs(int x,int pos,int date){//x为输入数组当前下标的位置pos为构成日期的位数一共8位每一位都要满足特定的要求date为当前时间的值只有当pos为8位并且初步合法时date才为完全值          if(x100)return;//输入的数组遍历完直接结束dfs          if(pos8){//pos等于8时则意味着日期的长度符合              if(check(date))ans;//长度符合check检查一下这个日期是否是合法日期如果合法则ans数量1              return;         }                  if((pos0a[x]2)||//日期的每一位都初步符合如果日期的位数与其该位数上的数字是否符合它的限制因为dfs是一位一位的递增因此只能初步筛选日期每一位上的数字只有等日期长度等于8时才能完全判断这个日期是否合法          (pos1a[x]0)||         (pos2a[x]2)||         (pos3a[x]3)||         (pos40a[x]a[x]1)||         (pos50a[x]a[x]9)||         (pos60a[x]a[x]3)||         (pos70a[x]a[x]9))         dfs(x1,pos1,date*10a[x]);//输入数组上的位置往后走这一位合法pos往下走一位临时的日期值*10当前的这一位数字                   dfs(x1,pos,date);//输入数组位置往后走这一位不合法pos不1date也不改变         }  int main(){          ios::sync_with_stdio(0); cin.tie(0);//在C中关闭输入输出流的同步以提高程序的执行效率//cout.tie(0)      for(int i0;i100;i)cina[i]; //输入          dfs(0,0,0);//从第一个字符开始dfs      coutans;//输出               return 0; }  #includebits/stdc.h using namespace std;int ans;//合法日期的总数bool vis[20240000];//记录这个合法日期或是错误日期是否出现过 初始化为0若为1则直接返回false int a[100];//记录输入的数组 bool check(int date){//检车这个日期是否是合法的日期 if(vis[date])return false;//之前出现过这个日期vis[date]1;//若是没出现过则把该日期标记为1 //判断这个日期是否为合法的日期 int mmdate/100%100;//取日期的月份 int dddate%100;//日期天数 if(mm1||mm12)return false;//如过月数不是1~12返回false if(mm1||mm3||mm7||mm8||mm10||mm12){//1,2,5,7,8,10,(腊)12三十一天不差判断月份为这些时日期是否在1~31若果是则然会true if(dd1dd31)return true;}else if(mm2){//2023年为闰年所以有28天判断月份为2时日期是否在1~28如果是则返回true if(dd1||dd28)return true;}else if(dd1mm30){//取余月份天数为20天看是否为1~30如果是则返回true return true;}else{return false;//其余情况则返回false }}void dfs(int x,int pos,int date){//x为输入数组当前下标的位置pos为构成日期的位数一共8位每一位都要满足特定的要求date为当前时间的值只有当pos为8位并且初步合法时date才为完全值 if(x100)return;//输入的数组遍历完直接结束dfs if(pos8){//pos等于8时则意味着日期的长度符合 if(check(date))ans;//长度符合check检查一下这个日期是否是合法日期如果合法则ans数量1 return;}if((pos0a[x]2)||//日期的每一位都初步符合如果日期的位数与其该位数上的数字是否符合它的限制因为dfs是一位一位的递增因此只能初步筛选日期每一位上的数字只有等日期长度等于8时才能完全判断这个日期是否合法 (pos1a[x]0)||(pos2a[x]2)||(pos3a[x]3)||(pos40a[x]a[x]1)||(pos50a[x]a[x]9)||(pos60a[x]a[x]3)||(pos70a[x]a[x]9))dfs(x1,pos1,date*10a[x]);//输入数组上的位置往后走这一位合法pos往下走一位临时的日期值*10当前的这一位数字 dfs(x1,pos,date);//输入数组位置往后走这一位不合法pos不1date也不改变 } int main(){ios::sync_with_stdio(0); cin.tie(0);//在C中关闭输入输出流的同步以提高程序的执行效率//cout.tie(0) for(int i0;i100;i)cina[i]; //输入 dfs(0,0,0);//从第一个字符开始dfs coutans;//输出 return 0; }
01熵 对于一个长度为 n 的 01 串 S x1x2x3…xn. 香农信息熵的定义为 其中 p(0), p(1) 表示在这个 01 串中 0 和 1 出现的占比。 比如对于S 100 来说信息熵 H(S ) - 13 log2(13) - 23 log2(23) - 23 log2(23) 1.3083。 对于一个长度为23333333 的 01 串如果其信息熵为 11625907.5798且 0 出现次数比 1 少那么这个01 串中 0 出现了多少次 本题的结果为一个整数在提交答案时只输出这个整数输出多余的内容将无法得分。 #includebits/stdc.h using namespace std; typedef long double db; const int N23333333;//01串的长度  const db ans11625907.5798,eps1e-4;//eps为误差10^-4保持在这个误差范围内即可  //因为浮点型有有效位所以肯定有一定误差  int main(){     //整体采用直接暴力的解法      for(int v0;vN/2;v){//v为0的个数,因为0的个数是小于1的因此小于总数的一半         int uN-v;//u为1的个数      db res-1.0*u*u/N*log2(1.0*u/N)-1.0*v*v/N*log2(1.0*v/N);//log2()函数求log以2为底的对数        if(fabs(res-ans)eps){//两者相减去绝对值小于误差则符合条件 fabs函数求绝对值           coutv;//输出0的个数           return 0;          }       }             return 0; }  #includebits/stdc.h using namespace std; typedef long double db; const int N23333333;//01串的长度 const db ans11625907.5798,eps1e-4;//eps为误差10^-4保持在这个误差范围内即可 //因为浮点型有有效位所以肯定有一定误差 int main(){//整体采用直接暴力的解法 for(int v0;vN/2;v){//v为0的个数,因为0的个数是小于1的因此小于总数的一半 int uN-v;//u为1的个数 db res-1.0*u*u/N*log2(1.0*u/N)-1.0*v*v/N*log2(1.0*v/N);//log2()函数求log以2为底的对数 if(fabs(res-ans)eps){//两者相减去绝对值小于误差则符合条件 fabs函数求绝对值 coutv;//输出0的个数 return 0;}}return 0; } 冶炼金属 #includebits/stdc.h using namespace std; const int MAX_N1e41; int N,A[MAX_N],B[MAX_N]; bool check_min(int v){for(int i1;iN;i){if(A[i]/vB[i])return false;return true; } }bool check_max( int v){for(int i1;iN;i){if(A[i]/VB[i])return false;return true;} } int main(){ios::sync_with_stdio(0);cin.tie(0);cinN;for(int i0;iN;i){cinA[i]B[i];}int L1,R1000000000,V_min;while(lR){int midLR1;if(check_min(mid)){V_minmid;Rmid-1; }else{Lmid1;}}int L1,R1000000000,V_max;while(lR){int midLR1;if(check_max(mid)){V_maxmid;Lmid1; }else{Rmid-1;}}coutv_min v_max;return 0; } 飞机降落 #includebits/stdc.h using namespace std; const int MAX_N11; int n; int N,T[MAX_N],D[MAX_N],L[MAX_N];bool used[MAX_N],have_answer; void dfs(int x,int tim){if(have_answer)return;if(xn){have_answer1;return;}for(int i1;in;i){if(!used[i]timT[i]D[i])used[i]1;dfs(x1,max(tim,T[i])D[i]);if(have_answer)return;used[i]0;} } void solve(){cinN;for(int i1;iN;i){cinT[i]D[i]L[i];used[i]0;}dfs(0,0);if(have_answer)coutYES\n;else coutNO\n;}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cinT;while(T–)solve();return 0; } 接龙数列 #includebits/stdc.h using namespace std; const int MAX_N1e55; int N,dp[10];int main(){ios::sync_with_stdio(0);cin.tie(0);cinN;for(int i0;iN;i){int A;cinA;vectorintd;while(A){d.push_back(A%10);A/10;} int y*d.begin(),xd.back();dp[y]max(dp[y],dp[x]1); }int len0;for(int i0;i10;i){lenmax(len,dp[i]);}coutN-len;return 0; } 岛屿数量  #includebits/stdc.h using namespace std; const int MAX_N51; int M,N; string mp[MAX_N]; bool vis[MAX_N][MAX_N];//对岛进行染色 bool used[MAX_N][MAX_N];//是否逃出去没检查一个岛都要进行标记因为当下一次遍历到该岛 int dx[]{0,0,1,-1,1,-1,1,-1}; int dy[]{1,-1,0,0,-1,1,1,-1}; void bfs_col(int x,int y){queueintqx,qy;qx.push(x);qy.push(y);vis[x][y]1;//bfs坐标放进队列后就标记 while(!qx.empty()){xqx.front();qx.pop(); yqy.front();qy.pop();for(int i0;i4;i ){int nxxdx[i];int nyydy[i];if(nx0||Mnx||ny0||Nny||vis[ny][nx]||mp[nx][ny]0)continue;//越界或是海水或被访问过就跳过 qx.push(nx);qy.push(ny);vis[nx][ny]1;//标记 } } } bool bfs_out(int x,int y){//逃出去 for(int i0;iM;i)for(int j0;jN;j)used[i][j]0;//清空标记从0开始找出口 queueintqx,qy;qx.push(x);qy.push(y); used[x][y]1;//放入队列后再标记下一次不能再访问while(!qx.empty()){xqx.front();qx.pop();yqy.front();qy.pop(); if(x0||xM-1||y0||yN-1)return true;//如果到达边界到达边界而不是超越边界就返回true; for(int i0;i8;i){int nxxdx[i];int nyydy[i];if(nx0||Mnx||ny0||Nny||used[ny][nx]||mp[nx][ny]1)continue;qx.push(nx);qy.push(ny);used[nx][ny]1;//标记的目的是为了让他不走回头路 }}}void solve(){cinMN;for(int i0;iM;i){cinmp[i];for(int j0;jN;j){vis[i][j]0; }} int ans0;for(int i0;iM;i){for(int j0;jN;j){if(!vis[i][j]mp[i][j]1){bfs_out(i,j);//先进行染色 if(bfs_out(i,j))ans;//看是否能逃出去若是该点为内岛则外岛已经被染色 }}}coutans\n; }int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cinT;while(T–){solve();}return 0; } #includebits/stdc.h using namespace std; typedef long long ll; int K; string S; char c1,c2; int main(){cinKSc1c2;int sum_c10;int nS.size();for(int ik-1,j0;in;i,j){//前缀和sum_c1记录前面a的数量当i所在位置为b时子串简写的数量就是b前面a的数量不包括前k个位置内的a if(S[j]c1)sum_c1;if(S[i]c2)anssum_c1;}coutans;return 0;return 0; } 整数删除  #includebits/stdc.h using namespace std; #define val first #define pos second const int MAX_N5e55; int N,K,pre[MAX_N],nxt[MAX_N]; typedef long long LL; typedef pairLL,intPLI; priority_queuePLIq; LL A[MAX_N]; int main(){ios::sync_with_stdio(0);cin.tie(0);cinNK;for(int i1;iN;i){cinA[i];pre[i]i-1;nxt[i]i1;q.push({-A[i],-i});}pre[1]-1;nxt[N]-1;while(K–){PLI now;do{nowq.top();q.pop();now.val-now.val;now.pos-now.pos;//原本是负的该为正的 }while(A[now.pos]!now.val);int PREpre[now.pos];int NXTnxt[now.pos];if(PRE!-1){A[PRE]now.val;q.push({-A[PRE],-PRE});nxt[PRE]NXT;}if(NXT!-1){A[NXT]now.val;q.push({-A[NXT],-NXT});pre[NXT]PRE;}A[now.pos]-1;}for(int i1;iN;i){if(A[i]!-1){coutA[i] ;}}return 0; } 景区导游 DFS遍历图暴力做法  正解:树上前缀和、最近公共祖先 树:一种数据结构无环连通图 无环连通图–任意两个点之间存在唯一的一条路径     2 6 5 1 记作一个点都不去掉之前总的花费记作sum (1)去掉2   sum-cost2-6去掉6   sum-cost[2-6]-cost[6-5]cost[2-5]  (3)去掉5   sum-cost[6-5]-cost[5-1]cost6-1去掉1   sum-cost[5-1] 暴力做法:DFS:O(n) 优化后的做法树上前缀和最近公共祖先O(logn)   图的存储: 链式前向型:链表 vector容器存图 二者的原理: 存储当前点的邻接点  x-y  edge[x].push_back(y);存储了一条x-y的边 无向边的存储就是存储两条有向边 x-y edge[x].push_back(y); edge[y].push_back(x); DFS组成{     iF()     {    递归终止的条件      }          往下递归的过程  }    #includebits/stdc.h #define endl \n #define deb(x) coutax x\n; #define INF 0x3f3f3f3f #define int long long using namespace std; const int N2e510; typedef pairint,int pii; mappil,intst;//记录从x到y的距离是多少 int a[N]; vectorpiiedge[N];//存图 //dfs的参数不是一下就想到的而是在写的1过程中发 //现你需要某个信息而这个信息你没有提前记录 //那么你可以把这个信息当作一个参数此时就达到了记录信息的目的 //s路程的起点 //v路径的终点 //u你当前走到了哪个点 //father当前这个点的父亲节点是谁避免重复走 //sum从s走到u的路径花费总和 bool dfs(int s,int u,int father,int v,int sum){if(uv){st[{s,v}]sum;st[{v,s}]sum;return true; } for(int i0;iedge[u].size();i){int sonedge[u][i].first;if(sonfather){continue;}int wedge[u][i].second;if(dfs(s,son,u,v,sumw))//如果找到了直接return true即可剩下的不用遍历; return true;}return false;}void solve(){int n,k;cinnk;for(int i0;in;i){int x,y,t;cinxyt;edge[x].push_back({y,t});//存图 edge[y].push_back({x,t});}for(int i0;ik;){//存路线 cina[i];} int ans0;for(int i0;ik-1;i){dfs(a[i],a[i],-1,a[i1],0);//路线上的点位之间的距离 ansst[{a[i],a[i1]}];}for(int i0;ik;i){int tmpans;/*记作一个点都不去掉之前总的花费记作sum (1)去掉2 sum-cost2-6去掉6 sum-cost[2-6]-cost[6-5]cost2-5去掉5 sum-cost[6-5]-cost[5-1]cost6-1去掉1 sum-cost[5-1] */if(i0){tmp-st[{a[i],a[i1]}];}else if(ik-1){tmp-st[{a[i-1],a[i]}];}else{tmp-st[{a[i-1],a[i]}];tmp-st[{a[i],a[i1]}];dfs(a[i-1],a[i1],-1,a[i1],0);tmpst[{a[i-1],a[i1]}];}couttmpendl;}}上面复杂度优点高了   正解是优化cost的求法 可以在O(n)的复杂度内预处理出来当前带你到根节点的距离 6-5的距离cost[0-1]cost[5-1]-2*cost[3-1] 求最近的公共祖先 3是6和5的最近公共祖先 公共祖先求解的过程是logn  最近公共祖先:      一共有三种写法倍增树链部分tarjan #includebits/stdc.h using namespace std; typedef long long LL; const int MAX_N1e51; vectorintE[MAX_N],W[MAX_N]; int N,K,dep[MAX_N],fa[MAX_N][21],A[MAX_N]; LL dis[MAX_N];//用倍增法求最近公共父节点 void dfs(int u,int Fa){dep[u]dep[Fa]1;fa[u][0]Fa;for(int i1;i20;i){fa[u][i]fa[fa[u][i-1]][i-1]; }for(int i0;iE[u].size();i){int vE[u][i],wW[u][i];if(vFa)continue;dis[v]dis[u]w;dfs(v,u);} }int LCA(int u,int v){if(dep[u]dep[v])swap(u,v);for(int i20;i0;i–){if(dep[fa[u][i]]dep[v])ufa[u][i];}if(uv)return u;for(int i20;i0;i){if(fa[u][i]!fa[v][i]){ufa[u][i];vfa[v][i];}}return fa[u][0];}LL path_dis(int u,int v){if(!u||!v)return 0;//如果删除的点是两边的其中一边在减该点没有边的点到它的距离时则返回零 //涉及不存在的点时返回0 return dis[u]dis[v]-2*dis[LCA(u,v)]; } int main() {ios::sync_with_stdio(0);cin.tie(0);cinNK;for(int i1;iN;i){int u,v,t; cinuvt;E[u].push_back(v);W[u].push_back(t);E[v].push_back(u);W[v].push_back(t);} dfs(1,0);LL ans0;for(int i1;iN;i){cinA[i];anspath_dis(A[i],A[i-1]);//总长度 }for(int i1;ik;i){//减去两点到该点的距离加上两点之间的距离 coutans-path_dis(A[i-1],A[i])-path_dis(A[i],A[i1])path_dis(A[i-1],A[i1]) ;}return 0;} 砍树  #includebits/stdc.h using namespace std; const int N1e55; vectorinte[N],num[N]; int n,m,dep[N],s[N],fa[N][21],ans; void dfs(int u,int Fa){dep[u]dep[Fa]1;fa[u][0]Fa;for(int i1;i20;i){fa[u][i]fa[fa[u][i-1]][i-1];}for(auto v:e[u]){//c11if(vFa)continue;dfs(v,u);} } void dfs2(int u,int Fa){for(int i0;ie[u].size();i){int ve[u][i],pnum[u][i];if(vFa)continue;dfs2(v,u);s[u]s[v];//差分 if(s[v]m)ansmax(ans,p);} }int LCA(int u,int v){if(dep[u]dep[v])swap(u,v); for(int i20;i0;i–){if(dep[fa[u][i]]dep[v])ufa[u][i];}if(uv)return u;for(int i20;i0;i–){if(fa[u][i]!fa[v][i]){ufa[u][i];vfa[v][i];} }return fa[u][0]; }int main(){cinnm;for(int i1;in;i){int x,y;cinxy;e[x].push_back(y);num[x].push_back(i);e[y].push_back(x);num[y].push_back(i);}dfs(1,0);for(int i1;im;i){int a,b;cinab;s[a];s[b];s[LCA(a,b)]-2; //两点到最近公共祖先那停止若想断开两点深度需要小于两点的最近公共祖先 即高于公共祖先的边取消掉两点的差分和}dfs2(1,0);coutansendl;return 0; }