Codeforces Round #654 (Div. 2) A~E 题解
LINK:CF R 654 div2
前言:F题是一个线段树分类讨论的题目 比赛的时候没看 赛后感觉没什么意思 所以咕掉了。
记事:第一次笼统的写一场比赛的题目 可能是我这场比赛打的太差了 题目不难 赛后轻而易举的解决 赛时可能是状态的问题吧.
A.Magical Sticks
容易发现不论奇偶构成的数字最优解一定为n 然后偶数答案显然为n/2 奇数可以多构成一对 n/2+1.
code
//#include<bits\stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define gc(a) scanf("%s",a+1)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-9
#define sq sqrt
#define mod 998244353
#define S second
#define F first
#define op(x) t[x].op
#define d(x) t[x].d
#define Set(a,v) memset(a,v,sizeof(a))
#define pf(x) ((x)*(x))
using namespace std;
char buf[1<<15],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
const int MAXN=2010;
int n,T;
int main()
{
//freopen("1.in","r",stdin);
get(T);
while(T--)
{
get(n);
put(n/2+(n&1));
}
return 0;
}
B.Magical Calendar
怀疑题意迷惑选手。。根据题意m的范围可以对n取min.
考虑格子宽度为1是方案为1 2的时候方案为2......不过注意宽度为n的时候方案为1 特判一下就做完了。
code
//#include<bits\stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define gc(a) scanf("%s",a+1)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-9
#define sq sqrt
#define mod 998244353
#define S second
#define F first
#define op(x) t[x].op
#define d(x) t[x].d
#define Set(a,v) memset(a,v,sizeof(a))
#define pf(x) ((x)*(x))
using namespace std;
char buf[1<<15],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
const int MAXN=2010;
int n,T,m;
int main()
{
//freopen("1.in","r",stdin);
get(T);
while(T--)
{
int ww=get(n);get(m);
m=min(m,n);
if(m==ww)putl((ll)m*(m+1)/2-n+1);
else putl((ll)m*(m+1)/2);
}
return 0;
}
</details>
**C.A Cookie for You**
比赛的时候人傻了 觉得不太会写 写了几个特判没过去 赛后写了两个特判就过了。
首先特判a+b<n+m的情况 下面讨论a+b>=n+m的情况。然后要多熟悉几遍题目中的两种顾客的吃法。
然后可以将两种顾客分别归纳为:1 谁多吃谁。2 谁少吃谁。
仔细观察发现第一种顾客对于任何一种局面来看都是可以做完的。
那么只需要让第二个顾客做完就行了,谁少吃谁 那么考虑这个少的能否支持下去 如果不行肯定是要想到能否吃到多的那个
而想要吃到多的那个只能让多的变成和这个少的至少相等或者更少然后才能吃 可以发现对方的那个此时也不为解 如此循环结果会更差 所以只需要特判min(a,b)和m的大小关系.
<details>
<summary>code</summary>
//#include<bits\stdc++.h>
include
include
include
include
include
include
include
include
include
include
include
include
include
include
include
include
include
include
define ll long long
define db double
define INF 1000000000
define ldb long double
define pb push_back
define put_(x) printf("%d ",x);
define get(x) x=read()
define gt(x) scanf("%d",&x)
define gi(x) scanf("%lf",&x)
define put(x) printf("%d\n",x)
define putl(x) printf("%lld\n",x)
define gc(a) scanf("%s",a+1)
define rep(p,n,i) for(RE ll i=p;i<=n;++i)
define go(x) for(ll i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
define fep(n,p,i) for(RE ll i=n;i>=p;--i)
define vep(p,n,i) for(RE ll i=p;i<n;++i)
define pii pair<ll,ll>
define mk make_pair
define RE register
define P 1000000007
define gf(x) scanf("%lf",&x)
define pf(x) ((x)*(x))
define uint unsigned long long
define ui unsigned
define EPS 1e-9
define sq sqrt
define mod 998244353
define S second
define F first
define op(x) t[x].op
define d(x) t[x].d
define Set(a,v) memset(a,v,sizeof(a))
define pf(x) ((x)*(x))
using namespace std;
char buf[1<<15],fs,ft;
inline char getc()
{
return (fsft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fsft))?0:fs++;
}
inline ll read()
{
RE ll x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x10+ch-'0';ch=getc();}
return x*f;
}
const ll MAXN=310;
ll a,b,n,m,T;
signed main()
{
//freopen("1.in","r",stdin);
get(T);
while(T--)
{
get(a);get(b);
get(n);get(m);
if(a+b<n+m){puts("No");continue;}
if(min(a,b)>=m){puts("Yes");continue;}
puts("No");
}
return 0;
}
D.Grid-00100
考试的时候人傻了 没想到绝妙的n^2的直接构造方法 然后放弃治疗。赛后一发n^2log过了。。然后被自己蠢到了。
n^2确实不好想这道题不卡多带一个log的做法 且官方的做法虽然是n^2的也没给证明 那么证明管我毛事
值得一提的是 这个n^2log的做法可以拓展优化到n^2.
容易想到答案要么为0要么为2.为0的时候k|n。然后可以强制给每一行和每一列安排上1的个数。
然后考虑构造 通过观察发现无论什么情况都能够构造出来。
那么考虑逐行构造 盲目填1会出错 然后考虑每次填那些1的时候填列尽量少的列 证明的话可以意会一下.
code
//#include<bits\stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define gc(a) scanf("%s",a+1)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-9
#define sq sqrt
#define mod 998244353
#define S second
#define F first
#define op(x) t[x].op
#define d(x) t[x].d
#define Set(a,v) memset(a,v,sizeof(a))
#define pf(x) ((x)*(x))
using namespace std;
char buf[1<<15],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
const int MAXN=310;
int n,T,m,k;
int res[MAXN];
pii s[MAXN];
int a[MAXN][MAXN];
inline int cmp(pii a,pii b){return a.F>b.F;}
int main()
{
//freopen("1.in","r",stdin);
get(T);
while(T--)
{
get(n);get(k);
memset(res,0,sizeof(res));
if(k%n){puts("2");}
else puts("0");
rep(1,n,i)
{
int ww=k/n+(i<=k%n),top=0;
rep(1,n,j)
{
int cc=k/n+(j<=k%n);
a[i][j]=0;
s[++top]=mk(cc-res[j],j);
}
sort(s+1,s+1+top,cmp);
rep(1,n,j)if(ww)a[i][s[j].S]=1,--ww,++res[s[j].S];else break;
rep(1,n,j)cout<<a[i][j];
cout<<endl;
}
}
return 0;
}
容易发现每次填的时候对于列来说01的段都是连续的 可以强行使用双端队列优化 进一步的记录上一次的位置直接推就行了 复杂度n^2.
code
//#include<bits\stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define gc(a) scanf("%s",a+1)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-9
#define sq sqrt
#define mod 998244353
#define S second
#define F first
#define op(x) t[x].op
#define d(x) t[x].d
#define Set(a,v) memset(a,v,sizeof(a))
#define pf(x) ((x)*(x))
using namespace std;
char buf[1<<15],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
const int MAXN=310;
int n,T,m,k;
int res[MAXN],nex[MAXN];
int a[MAXN][MAXN];
inline int cmp(pii a,pii b){return a.F>b.F;}
int main()
{
//freopen("1.in","r",stdin);
get(T);
while(T--)
{
get(n);get(k);
memset(res,0,sizeof(res));
if(k%n){puts("2");}
else puts("0");
int last=1;
rep(1,n,i)nex[i]=i+1;nex[n]=1;
rep(1,n,i)
{
int ww=k/n+(i<=k%n);
rep(1,n,j)a[i][j]=0;
while(ww)
{
a[i][last]=1;
--ww;last=nex[last];
}
rep(1,n,j)cout<<a[i][j];
cout<<endl;
}
}
return 0;
}
证明比较容易这里不再赘述.
E1.Asterism (Easy Version)
这题怎么说呢 比较简单 考场的时候写懵逼了 写的都不知道是啥然后过了 非常的迷 导致E2更迷惑。。
考虑知道一个x如何求F(x). 先考虑x是否会存在方案数:安排最优的话那么必然是从小到大挑战。
将a数组排序 x要满足 \(x>=max{a_i-i+1}\)
方案数:这个是关键 可以考虑容斥 总方案-一个位置不合法+两个位置不合法-...然后可以发现这个方法不太行。
那么只能考虑直接求出合法的方案了 对于每个位置限制数字已经固定 即\(b_i=x+i-1\)
那么第一个点放数字的个数可以求出 第二个数字放数字的集合包含第一个集合 设\(w_i\)表示第i个位置能放的数字个数
\(F(x)=\Pi (w_i-i+1)\)可以发现这个方案不重不漏了。
这样就得了 \(n\cdot Max\) 不过过不了 题目中有\(a_i<=2000\)当x取到2000的时候显然此时%p一定为0 所以复杂度\(n^2\)
code
//#include<bits\stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define gc(a) scanf("%s",a+1)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-8
#define sq sqrt
#define S second
#define F first
#define op(x) t[x].op
#define d(x) t[x].d
#define Set(a,v) memset(a,v,sizeof(a))
using namespace std;
char buf[1<<15],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
const int MAXN=5010,maxn=155;
int n,mod,cnt;
int a[MAXN],ans[MAXN];
inline int F(int x)
{
int flag=0;ll ans=1;
rep(1,n,i)
{
while(a[flag+1]<=x+i-1&&flag+1<=n)++flag;
ans=ans*(flag-i+1)%mod;
}
return ans;
}
int main()
{
//freopen("1.in","r",stdin);
//freopen("2.out","w",stdout);
get(n);get(mod);
rep(1,n,i)get(a[i]);
sort(a+1,a+1+n);
int minn=0;
rep(1,n,i)minn=max(minn,a[i]-i+1);
rep(minn,2000,i)if(F(i))ans[++cnt]=i;
put(cnt);
rep(1,cnt,i)printf("%d ",ans[i]);
return 0;
}
E2.Asterism (Hard Version)
这个需要一点小功力。不过也不难想。设minn为最小合法答案。
考虑F(minn)模p为0的时候后面也一定为0 由此从F(w)为0开始后面都为0所以1的部分是连续的一段。
二分出来r输出即可。复杂度\(nlogn+nlogMx\)
还有一种更快的做法 是我想出上述做法之前想到的一个做法:其实知道答案左端点minn 然后什么时候mod p为0呢?
对于一个x 存在\(x+i-1>=a_y\)那么其实\(y-i+1>=p\)即可.等式可以变成\(x+i-1>=a_{i+p-1}\)
再变形\(x>=a_{i+p-1}-i+1\)取p~n的那段的最小值 得到一个x就可以O(1)判断。
甚至不需要二分从minn开始暴力扫就行 二分也可以一个log。
所以总复杂度\(nlogn+logMx\)
code
//#include<bits\stdc++.h>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define gc(a) scanf("%s",a+1)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-8
#define sq sqrt
#define S second
#define F first
#define op(x) t[x].op
#define d(x) t[x].d
#define Set(a,v) memset(a,v,sizeof(a))
using namespace std;
char buf[1<<15],*fs,*ft;
inline char getc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=getc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
const int MAXN=100010,maxn=155;
int n,mod,cnt;
int a[MAXN];
int maxx=INF;
int main()
{
//freopen("1.in","r",stdin);
//freopen("2.out","w",stdout);
get(n);get(mod);
rep(1,n,i)get(a[i]);
sort(a+1,a+1+n);
int minn=0;
for(int i=mod,j=0;i<=n;++i,++j)minn=max(minn,a[i]-i+1),a[i]-=j,maxx=min(maxx,a[i]);
rep(1,mod-1,i)minn=max(minn,a[i]-i+1);
if(minn>=maxx){puts("0");return 0;}
int l=minn,r=1000000000;
while(l<r)
{
int mid=(l+r)>>1;
if(mid<maxx)l=mid+1;
else r=mid;
}
put(r-minn);
rep(minn,r-1,i)printf("%d ",i);
return 0;
}
写完辣 成就感慢慢的 不过掉分了/ll 下次一定涨回来。
Codeforces Round #654 (Div. 2) A~E 题解的更多相关文章
- Codeforces Round #612 (Div. 2) 前四题题解
这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...
- Codeforces Round #198 (Div. 2)A,B题解
Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...
- Codeforces Round #672 (Div. 2) A - C1题解
[Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...
- Codeforces Round #614 (Div. 2) A-E简要题解
链接:https://codeforces.com/contest/1293 A. ConneR and the A.R.C. Markland-N 题意:略 思路:上下枚举1000次扫一遍,比较一下 ...
- Codeforces Round #610 (Div. 2) A-E简要题解
contest链接: https://codeforces.com/contest/1282 A. Temporarily unavailable 题意: 给一个区间L,R通有网络,有个点x,在x+r ...
- Codeforces Round #611 (Div. 3) A-F简要题解
contest链接:https://codeforces.com/contest/1283 A. Minutes Before the New Year 题意:给一个当前时间,输出离第二天差多少分钟 ...
- Codeforces Round #654 (Div. 2)
比赛链接:https://codeforces.com/contest/1371 A. Magical Sticks 题意 有 $n$ 根小棍,长度从 $1$ 到 $n$,每次可以将两根小棍连接起来, ...
- Codeforces Round #499 (Div. 2) D. Rocket题解
题目: http://codeforces.com/contest/1011/problem/D This is an interactive problem. Natasha is going to ...
- Codeforces Round #499 (Div. 2) C Fly题解
题目 http://codeforces.com/contest/1011/problem/C Natasha is going to fly on a rocket to Mars and retu ...
随机推荐
- BZOJ 1131 [POI2008] STA-Station 题解
题目 The first stage of train system reform (that has been described in the problem Railways of the th ...
- python中pymysql executemany 批量插入数据
import pymysqlimport timedb = pymysql.connect("IP","username","password&quo ...
- [源码解析]Oozie来龙去脉之内部执行
[源码解析]Oozie来龙去脉之内部执行 目录 [源码解析]Oozie来龙去脉之内部执行 0x00 摘要 0x01 Oozie阶段 1.1 ActionStartXCommand 1.2 HiveAc ...
- class文件的基本结构及proxy源码分析二
前文地址:https://www.cnblogs.com/tera/p/13267630.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...
- 数据可视化之powerBI技巧(十一)基于SQL思维的PowerBI DAX实战
本文来自于PowerBI星球嘉宾天行老师的分享,天行老师不仅DAX使用娴熟,更是精通SQL,下面就来欣赏他利用SQL思维编写DAX解决问题的一个实战案例. 基于SQL思维使用DAX解决实战问题 作者: ...
- python 装饰器(三):装饰器实例(一)
示例 7-15 定义了一个装饰器,它会在每次调用被装饰的函数时计时,然后把经过的时间.传入的参数和调用的结果打印出来.示例 7-15 一个简单的装饰器,输出函数的运行时间 import time de ...
- Jsonp处理跨域请求
Jsonp的使用需要前端和后端共同配合来完成 服务端设置(ASP.NET MVC实现): 在将返回的Json数据包在一个方法名称的内部,如上 客户端设置: 同时要加上一个回调函数用于处理请求的数据 在 ...
- Guava集合--Immutable(不可变)集合
所谓不可变集合,顾名思义就是定义了之后不可修改的集合. 一.为什么要使用不可变集合 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的: 不可变对象被多个线程调用时,不存在竞态 ...
- scrapy shell 遇到的问题
有时候用scrapy shell来调试很方便,但是有些网站有防爬虫机制,所以使用scrapy shell会返回403,比如下面 有两种解决方法: (1):第一种方法是在命令上加上-s USER_AGE ...
- nginx一个端口配置多个不同服务映射
upstream tomcat_server{ server 127.0.0.1:8087; server 192.168.149.117:8088; } server { listen 8088; ...