2019CCPC网络预选赛 八道签到题题解

目录

  • 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
    • 6702 &
    • 6703 array
    • 6704 K-th occurrence
    • 6705 path
    • 6706 huntian oy
    • 6707 Shuffle Card
    • 6708 Windows Of CCPC
    • 6709 Fishing Master

@

2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛

CSDN

6702 &

\(1 and 1\)的话,\(c\)就必须为\(1\)。其他的贪心选\(0\).
注意c为正整数,0的话就取最低位1.

#include <iostream>
#define ll long long
using namespace std;
void solve(ll a,ll b) {ll c=0;for(ll i=31;i>=0;--i) {bool k1=a&(1LL<<i),k2=b&(1LL<<i);if(k1==1&&k2==1) c|=1LL<<i;} if(c) return cout<<c<<"\n",void();for(ll i=31;i>=0;--i) {bool k1=a&(1LL<<i),k2=b&(1LL<<i);if(k1||k2) c=1LL<<i;} cout<<c<<"\n";
}
int main() {int T;cin>>T;while(T --> 0) {ll a,b;cin>>a>>b;solve(a,b);}return 0;
}

6703 array

修改操作其实是删除操作。
考虑不删除的话,就是把删除的数字放入\(set\)
最终答案就是不删除的\(ans\)\(set\)中符合条件的取个最小值。
方法一
建立主席树维护区间和。
二分,主席树\(check\)
复杂度\(O(nlog^2n)\),实测\(T\)飞。
方法二
主席树上二分。
主席树不变查询区间和。然后找到第一个包含的满足条件的子区间。
条件就是\(r-l+1 < e[rt].tot\),然后再在这个区间上查一次就行了。

复杂度都是\(O(nlogn)\)
问了个当场切的老哥的代码,直接线段树,也没\(set\)直接改,我这里先\(Orz\)了。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <set>
#define ls(x) e[x].l
#define rs(x) e[x].r
#define _ 100007
using namespace std;
inline char nc() {static char buf[3000000], *p1 = buf, *p2 = buf;return p1 == p2 && (p2 = (p1 = buf) + fread (buf, 1, 1000000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,m,a[_],cnt,rt[_];
set<int> dsr;
struct node{int l,r,siz;}e[_*20];
void insert(int l,int r,int pos,int val,int x,int &y) {e[y=++cnt]=e[x];e[y].siz++;if(l==r) return;int mid=(l+r)>>1;if(pos<=mid) insert(l,mid,pos,val,ls(x),ls(y));else insert(mid+1,r,pos,val,rs(x),rs(y));}
int lastans,flag;
int ask(int l,int r,int x) {if(l==r) return l;int mid=(l+r)>>1;if(e[ls(x)].siz<mid-l+1) return ask(l,mid,ls(x));else return ask(mid+1,r,rs(x));
}
void query(int l,int r,int L,int R,int x) {if(L<=l) {if(!flag&&e[x].siz!=r-l+1) {flag=1,lastans=min(lastans,ask(l,r,x));} return;}int mid=(l+r)>>1;if(L<=mid&&!flag) query(l,mid,L,R,ls(x));if(R>mid&&!flag) query(mid+1,r,L,R,rs(x));
}
int main() {int T=read();while(T --> 0) {dsr.clear(),dsr.insert(0x3f3f3f3f);cnt=0;for(int i=1;i<=n;++i) rt[i]=0;for(int i=1;i<=cnt;++i) e[i]={};n=read(),m=read();for(int i=1;i<=n;++i) a[i]=read(),insert(1,n+1,a[i],a[i],rt[i-1],rt[i]);rt[n+1]=rt[n];lastans=0;for(int i=1;i<=m;++i) {int opt=read();if(opt==1) {int pos=read()^lastans;if(!dsr.count(a[pos])) dsr.insert(a[pos]);} else {int r=read()^lastans,k=read()^lastans;lastans=*dsr.lower_bound(k),flag=0;query(1,n+1,k,n+1,rt[r]);printf("%d\n",lastans);}}}return 0;
}

6704 K-th occurrence

想了想,只会后缀数组+二分+主席树,感觉有点恐怖就没写,最后还是写了
然后套了个后缀数组板子就过了,实现还是挺简单的一点也不恐怖。
先对串串进行一遍后缀排序。
显然符合条件的串是一个区间,用Lcp进行二分来找到边界。
边界长度不够k就是-1,否则就查询区间的第k小,用主席树维护即可。

#include <bits/stdc++.h>
using namespace std;
const int _=2e5+7;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,Q,rt[_];
char s[_];
namespace SA {#define FOR(i,a,b) for(int i=a;i<=b;++i)#define ROF(i,a,b) for(int i=a;i>=b;--i)int sa[_],rk[_],c[_],x[_],height[_],st[_][21];void clear() {memset(sa,0,sizeof(sa));memset(rk,0,sizeof(rk));memset(c,0,sizeof(c));memset(x,0,sizeof(x));memset(height,0,sizeof(height));memset(st,0,sizeof(st));}void get_sa() {int m=300;FOR(i,1,n) ++c[rk[i]=s[i]];FOR(i,1,m) c[i]+=c[i-1];ROF(i,n,1) sa[c[rk[i]]--]=i;for(int k=1;k<=n;k<<=1) {int p=0;FOR(i,n-k+1,n) x[++p]=i;FOR(i,1,n) if(sa[i]>k) x[++p]=sa[i]-k;FOR(i,1,m) c[i]=0;FOR(i,1,n) ++c[rk[i]];FOR(i,1,m) c[i]+=c[i-1];ROF(i,n,1) sa[c[rk[x[i]]]--]=x[i],x[i]=0;swap(rk,x);rk[sa[1]]=1,p=1;FOR(i,2,n) rk[sa[i]]=(x[sa[i]]==x[sa[i-1]]&&x[sa[i]+k]==x[sa[i-1]+k]) ? p : ++p;if(p==n) break;m=p;}}void get_height() {FOR(i,1,n) rk[sa[i]]=i;int k=0;FOR(i,1,n) {k=k?k-1:0;int j=sa[rk[i]-1];while(s[i+k]==s[j+k]&&i+k<=n&&j+k<=n) k++;height[rk[i]]=k;}height[0]=0;FOR(i,1,n) st[i][0]=height[i];FOR(j,1,20) for(int i=1;i+(1<<j)-1<=n;++i)st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);}int LCP(int i,int j) {if(i-1==j) return n-sa[i-1]+1;int x=log2(j-i+1);return min(st[i][x],st[j-(1<<x)+1][x]);}
}
namespace TREE {#define ls(x) e[x].l#define rs(x) e[x].rstruct node {int l,r,siz;}e[_*32];int cnt;void insert(int l,int r,int L,int x,int &y) {e[y=++cnt]=e[x];e[y].siz++;if(l==r) return;int mid=(l+r)>>1;if(L<=mid) insert(l,mid,L,ls(x),ls(y));else insert(mid+1,r,L,rs(x),rs(y));}int query(int l,int r,int k,int x,int &y) {if(l==r) return l;int mid=(l+r)>>1,w=e[ls(y)].siz-e[ls(x)].siz;if(k<=w) return query(l,mid,k,ls(x),ls(y));else return query(mid+1,r,k-w,rs(x),rs(y));}
}
void solve(int S,int T,int k) {int L,R,l,r;l=1,r=SA::rk[S];while(l<=r) {int mid=(l+r)>>1;if(SA::LCP(mid+1,SA::rk[S])>=T-S+1) L=mid,r=mid-1;else l=mid+1;}l=SA::rk[S],r=n;while(l<=r) {int mid=(l+r)>>1;if(SA::LCP(SA::rk[S]+1,mid)>=T-S+1) R=mid,l=mid+1;else r=mid-1;}// cout<<SA::rk[S]<<"\n";// cout<<L<<" "<<R<<"\n";if(R-L+1<k) return puts("-1"),void();printf("%d\n",TREE::query(1,n,k,rt[L-1],rt[R]));
}
int main() {int T=read();while(T --> 0) {//clearmemset(rt,0,sizeof(rt));memset(TREE::e,0,sizeof(TREE::e));TREE::cnt=0;SA::clear();//initn=read(),Q=read();scanf("%s",s+1);n=strlen(s+1);SA::get_sa();SA::get_height();for(int i=1;i<=n;++i) TREE::insert(1,n,SA::sa[i],rt[i-1],rt[i]);//debug// puts("sa : ");// for(int i=1;i<=n;++i) cout<<SA::sa[i]<<" ";// puts("\nrk : ");// for(int i=1;i<=n;++i) cout<<SA::rk[i]<<" ";// cout<<"\n";// puts("LCP");// for(int i=1;i<=n;++i) {//     for(int j=1;j<=n;++j) {//         if(i>j) printf("0 ");//         else printf("%d ",SA::LCP(i+1,j));//     }//     printf("\n");// }//querywhile(Q --> 0) {int l=read(),r=read(),k=read();solve(l,r,k);}}return 0;
}

6705 path

类似于NOI2010超级钢琴和十二省联考的异或粽子。
往这里思考过,不知道咋的\(3s\)后就放弃了,也许是当时觉得不对?
现在一看很对啊。
首先我们每个点连出的边按照权值排序。
用一个优先队列维护每个点为起始点的没被选中的最短路径,每次堆上找到最小的,然后删掉。
之后我们要加入两条要成为最短的可能路径。
1.\(t\)之后找一条最小的边接上。
2.若与\(t\)相连的上一个点为\(s,<s,t>\)这条边为第k大,则起点\(->s+k+1\)大边。
路径权值\(w\)对应着加加减减。
这里初始点不用记录,只记录\(s,t,k,w\)就行了。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=5e4+7;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int ask[_];ll ans[_];
struct node{int s,t,k;ll w;node(int a,int b,int c,ll x) {s=a,t=b,k=c,w=x;}
};
bool operator < (node a,node b) {return a.w>b.w;
}
priority_queue<node> q;
vector< pair<ll, int> > G[_];
int main() {int T=read();while(T --> 0) {int n=read(),m=read(),Q=read(),cnt=0,limit=0;while(!q.empty()) q.pop();for(int i=1;i<=n;++i)  G[i].clear();for(int i=1;i<=m;++i) {int u=read(),v=read(),w=read();G[u].push_back(make_pair(w,v));}for(int i=1;i<=n;++i) {sort(G[i].begin(),G[i].end());if(G[i].size()) q.push(node(i,G[i][0].second,0,G[i][0].first));}for(int i=1;i<=Q;++i) ask[i]=read(),limit=max(limit,ask[i]);while(!q.empty()&&cnt<limit) {node u=q.top();q.pop();ans[++cnt]=u.w;if(u.k+1<(int)G[u.s].size())q.push(node(u.s,G[u.s][u.k+1].second,u.k+1,u.w-G[u.s][u.k].first+G[u.s][u.k+1].first));if(G[u.t].size()>0)q.push(node(u.t,G[u.t][0].second,0,u.w+G[u.t][0].first));}for(int i=1;i<=Q;++i) printf("%lld\n",ans[ask[i]]);}return 0;
}

6706 huntian oy

\(gcd(i^a-j^a,i^b-j^b)=i-j(a,b互质)\)
\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i}(i-j)[(i,j)=1]\)
\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i}i-\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i}j([(i,j)=1])\)
与他互质的和为\(\frac{n*\phi(n)}{2},因为i\)对应\(n-i\)
\(\sum\limits_{i=1}^{n}i*\phi(i)-\sum\limits_{i=1}^{n}(\frac{i*\phi(i)}{2}+[i==1])\)
\(\frac{(\sum\limits_{i=1}^{n}i*\phi(i))-1}{2}\)
用杜教筛来求\(i*\phi(i)\)的前缀和就行了。
\(f(x)=x*\phi(x)\)
\((f*g)(n)=\sum\limits_{d|n}g(d)*\phi(\frac{n}{d})*\frac{n}{d}\)
显然\(g(i)为id(i)\)最合适。
\((f*g)(n)=n*\sum\limits_{d|n}\phi(\frac{n}{d})=n^2\)
\(g(1)S(n)=\sum\limits_{i=1}^{n}g(i)S(\frac{n}{i})-\sum\limits_{i=2}^{n}g(i)S(\frac{n}{i})\)
\(S(n)=\sum\limits_{i=1}^{n}i^2-\sum\limits_{i=2}^{n}iS(\frac{n}{i})\)

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=5e6+7,mod=1e9+7,limit=5000000;
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int inv_2,inv_6,vis[_],pri[_],cnt;
ll phi[_];
int q_pow(int a,int b) {int ans=1;while(b) {if(b&1) ans=1LL*ans*a%mod;a=1LL*a*a%mod,b>>=1;} return ans;
}
void Euler() {vis[1]=phi[1]=1;for(int i=1;i<=limit;++i) {if(!vis[i]) pri[++cnt]=i,phi[i]=i-1;for(int j=1;j<=cnt&&pri[j]*i<=limit;++j) {vis[pri[j]*i]=1;if(i%pri[j]==0) {phi[i*pri[j]]=phi[i]*pri[j];break;} else phi[i*pri[j]]=phi[i]*(pri[j]-1);}}for(int i=2;i<=limit;++i) phi[i]=(phi[i-1]+1LL*phi[i]*i%mod)%mod;
}
unordered_map<int,int> ans_phi;
int get(int n) {return 1LL*n*(n+1)/2%mod;}
int solve_phi(int n) {if(n<=limit) return phi[n];if(ans_phi[n]) return ans_phi[n];ll tmp=1LL*n*(n+1)%mod*(2*n+1)%mod*inv_6%mod;for(int l=2,r;l<=n;l=r+1) {r=n/(n/l),tmp-=1LL*(get(r)-get(l-1))*solve_phi(n/l)%mod,tmp=(tmp%mod+mod)%mod;} return ans_phi[n]=tmp;
}
int main() {inv_2=q_pow(2,mod-2),inv_6=q_pow(6,mod-2);Euler();int T=read();while(T --> 0) {int N=read();int ans=1LL*(solve_phi(N)-1)*inv_2%mod;ans=(ans%mod+mod)%mod;printf("%d\n",ans);N=read(),N=read();}return 0;
}

6707 Shuffle Card

想了半天也不会啊,平衡树还很麻烦,不想写。
其实倒着做就行了,用\(stack\)其实本质也是倒着做。

#include <bits/stdc++.h>
using namespace std;
const int _=2e5+7;
int n,m,a[_],b[_],vis[_];
vector<int> ans;
int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;++i) scanf("%d",&a[i]);for(int i=1;i<=m;++i) scanf("%d",&b[i]);for(int i=m;i>=1;--i) {if(vis[b[i]]) continue;vis[b[i]]=1;ans.push_back(b[i]);}for(int i=1;i<=n;++i) {if(vis[a[i]]) continue;ans.push_back(a[i]);}for(int i=0;i<n;++i) cout<<ans[i]<<" ";return 0;
}

6708 Windows Of CCPC

这是\(yjg\)外出模拟赛的\(luogu\)原题啊,\(axm\)还拉我做过,把\(0,1\)改成了\(C,P\)了而已。
递归即可。
分成四块,先递归第一块,剩下的三块复制第一块的内容,然后第四块取反。

#include <bits/stdc++.h>
using namespace std;
const int _=1207;
int n,A[_][_];
void copp(int x,int y,int len) {for(int i=0;i<len;++i)for(int j=0;j<len;++j)A[x+i][y+j]=A[i][j];
}
void print(int x) {for(int i=0;i<(1<<x);++i) {for(int j=0;j<(1<<x);++j)printf("%c",A[i][j]?'C':'P');printf("\n");}
}
void calc(int n) {if(n==0) return A[0][0]=1,void();calc(n-1);int len=1<<(n-1);copp(0,len,len);copp(len,len,len);for(int i=0;i<len;++i)for(int j=0;j<len;++j)A[len+i][j]=A[i][j]^1;
}
int main() {int T;cin>>T;while(T-->0) {int x;cin>>x;calc(x);print(x);}
}

6709 Fishing Master

补充:看到zhihu好多全局钓鱼的,其实不难吧。
考虑dp,不会。贪心。
首先一开始肯定要先捉一次鱼。
发现捉鱼分两种种。
1.煮鱼的时间内能去捉鱼并且在锅里鱼没熟之前回来。
2.煮鱼的时间内能去捉鱼并且在锅里鱼熟之后时候回来。
显然1这种情况能干就干,相当于一开始就捉到了这些条。
剩下的捕鱼就得是情况2了,因为剩下的煮鱼时间都是小于捕鱼时间的,当然是贪心的从煮鱼时间大的开始捉。
发现这样一定能安排上(先捉情况2,然后过程中能捉1就捉1)。
然后就做完了。

#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
const int _=2e5+7;
ll n,m,t[_];
int main() {std::ios::sync_with_stdio(false);ll T;cin>>T;while(T --> 0) {        cin>>n>>m;for(ll i=1;i<=n;++i) cin>>t[i];sort(t+1,t+1+n);ll ma=0,ans=0;for(ll i=1;i<=n;++i) ma+=t[i]/m;for(ll i=1;i<=n;++i) ans+=t[i];ans+=m;if(ma>=n-1) {cout<<ans<<"\n";} else {ll need=n-1-ma;for(ll i=1;i<=n;++i) t[i]-=t[i]/m*m;sort(t+1,t+1+n);for(ll i=n;i>=1;--i) {need--;ans+=m-t[i];    if(!need) break;}cout<<ans<<"\n";}    }
}

转载于:https://www.cnblogs.com/dsrdsr/p/11406004.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解表单脚本系列第一篇——表单对象

前面的话 javascript最初的一个应用就是分担服务器处理表单的责任&#xff0c;打破处处依赖服务器的局面。尽管目前的web和javascript已经有了长足的发展&#xff0c;但web表单的变化并不明显。由于web表单没有为许多常见任务提供现成的解决方法&#xff0c;很多开发人员不仅会…

stm32开发问题集锦

1 在flash中跑程序时&#xff0c;能进入中断&#xff0c;但在ram中跑时&#xff0c;进不了中断的原因。看以下的中断配置函数可以知道&#xff0c;要在ram中调试程序&#xff0c;需要定义VECT_TAB_RAM。定义方法a:在Project\Options for taget xxx 的对话框的c/c中定义宏VECT_T…

luoguP4213 【模板】杜教筛(Sum)杜教筛

链接 luogu 思路 为了做hdu来学杜教筛。 杜教筛模板题。 卡常数&#xff0c;我加了register居然跑到不到800ms。 太深了。 代码 // luogu-judger-enable-o2 #include <bits/stdc.h> #define ll long long using namespace std; const int _5000030; int vis[_],pri[_],cn…

深入理解脚本化CSS系列第二篇——查询计算样式

前面的话 元素的渲染结果是多个CSS样式博弈后的最终结果&#xff0c;这也是CSS中的C(cascade)层叠的含义。访问第一篇中的style属性只能获取行间样式&#xff0c;这通常来说&#xff0c;并不是我们想要的结果。本文将详细介绍如何查询计算样式 getComputedStyle() 元素的计算样…

创建自己的Java批注

如果您一直在用Java编程并且使用诸如Spring和Hibernate之类的任何流行框架&#xff0c;那么您应该对使用注释非常熟悉。 当使用现有框架时&#xff0c;其注释通常就足够了。 但是&#xff0c;您是否发现需要创建自己的注释&#xff1f; 不久之前&#xff0c;我找到了一个理由来…

浅谈MAXIMO项目实施(转)

浅谈MAXIMO项目实施工作以来&#xff0c;参与了XX公司的MAXIMO项目实施&#xff0c;妄谈一些工作中的感受和对MAXIMO的理解&#xff0c;欢迎砖头。[b]对MAXIMO的理解[/b]MAXIMO是老外的软件&#xff0c;是J2EE上架起的很成熟的平台级系统&#xff0c;其中融入了老外的管理方式和…

完整机器学习项目的流程

1 抽象成数学问题 明确问题是进行机器学习的第一步。机器学习的训练过程通常都是一件非常耗时的事情&#xff0c;胡乱尝试时间成本是非常高的。 这里的抽象成数学问题&#xff0c;指的明确我们可以获得什么样的数据&#xff0c;抽象出的问题&#xff0c;是一个分类还是回归或者…

使用Stream API的类Java产量

几种编程语言&#xff08;例如Ruby或Python等&#xff09;提供yield命令。 在内存消耗方面&#xff0c;Yield提供了一种有效的方式&#xff0c;可以通过按需生成值来创建一系列值。 有关Python产量的更多信息。 让我们考虑一个需要大量安全随机整数的类或方法。 经典方法是创建…

深入理解DOM节点类型第六篇——特性节点Attribute

前面的话 元素的特性在DOM中以Attr类型表示&#xff0c;从技术角度讲&#xff0c;特性是存在于元素的attributes属性中的节点。尽管特性是节点&#xff0c;但却不是DOM节点树的一部分。本文将详细介绍该部分内容 特征 特性节点的三个node属性————nodeType、nodeName、nodeV…

Vista,Windows7中给IIS7添加PHP支持

截止到发文时&#xff08;2009年9月25日&#xff09;&#xff0c;PHP是最新版本为5.3.0&#xff0c;但是5.3.0在IIS中的运行方式是FastCGI&#xff0c;要在Vista的IIS7上实现这一点我始终没弄成。最后我还是用的老方法&#xff0c;ISAPI&#xff0c;选用了一个5.3以前的版本&am…

python画手绘图

第一步&#xff1a;插入代码 #e17.1HandDrawPic.py from PIL import Image import numpy as np vec_el np.pi/2.2 # 光源的俯视角度&#xff0c;弧度值 vec_az np.pi/4. # 光源的方位角度&#xff0c;弧度值 depth 10. # (0-100) im Image.open(C:\\Users\\Thinkpad\\Deskt…

cf1208G Polygons 欧拉函数

链接 cf 给你两个正整数\(n\)和\(k\)&#xff0c;询问在一个圆上你最少需要几个点构才能造出\(k\)个边数小于等于\(n\)的正多边形 思路 深受迫害&#xff0c;所以写的详细一点&#xff0c;不会请留言。 性质1 考虑加进一个\(x\)边形。那么他的因子\(d\)一定在他之前加进来了. 因…

Java 8:功能性VS传统

业务逻辑是相同的&#xff1a; 给定一个由访问次数/时间组成的String表达式&#xff0c;例如&#xff1a;“ 1 / 24h&#xff0c;1..3 / 3h&#xff0c;5 / *” 然后&#xff0c;结果应为以下字符串列表&#xff1a; “ 1 / 24h”&#xff0c; “ 1 / 3h”&#xff0c;“ 2…

深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器

前面的话 过滤选择器的内容非常多&#xff0c;本文介绍过滤选择器的最后一部分——状态选择器 焦点状态 :focus :focus选择器选择当前获得焦点的元素 <div><button>btn1</button><button>btn2</button><button>btn3</button></d…

aop 幂等验证(二)

1 创建IIdempotent Target({ElementType.PARAMETER, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface IIdempotent { } 2 创建aop Component Aspect public class IdempotentAction {public final static String ERROR_REPEATSUBMIT &q…

pursuit of happiness

看的过程中&#xff0c;一直在看时间&#xff0c;只剩30分钟了&#xff0c;20分&#xff0c;15分了&#xff0c;主人公怎么还没发达。 因为那种痛苦&#xff0c;绝望&#xff0c;沮丧&#xff0c;真的可以隔着屏幕传递过来。 你会带着儿子住厕所么&#xff1f; 你会拼了老命赶时…

解读阿里巴巴集团的“大中台、小前台”组织战略

解读阿里巴巴集团的“大中台、小前台”组织战略 https://www.iyiou.com/p/92012.html 亿欧导读 ] 阿里的“中台战略” 不是一个简单的组织变革&#xff0c;还有业务变革、机制变革、技术架构变革的一次全面转型。 【编者按】阿里巴巴“大中台小前台”的中台战略的官方提法源自2…

编译时检查JPA查询

JPA提供了几种查询数据的方法。 可以根据各种标准&#xff08;例如&#xff0c;所使用的语言&#xff08;SQL与JPQL&#xff09;或查询是静态的&#xff08;编译时间&#xff09;还是动态的&#xff08;执行时间&#xff09;&#xff09;对此类替代方案进行分类。 静态查询是使…

深入理解DOM节点关系

前面的话 DOM可以将任何HTML描绘成一个由多层节点构成的结构。节点分为12种不同类型&#xff0c;每种类型分别表示文档中不同的信息及标记。每个节点都拥有各自的特点、数据和方法&#xff0c;也与其他节点存在某种关系。节点之间的关系构成了层次&#xff0c;而所有页面标记则…

Windows服务编写

摘要&#xff1a;几乎所有的操作系统在启动的时候都会启动一些不需要与用户交互的进程&#xff0c;这些进程在Windows中就被称作服务。它由服务程序、服务控制程序&#xff08;&#xff33;&#xff23;&#xff30;&#xff0c;service control program&#xff09;和服务控制…