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 ...
随机推荐
- 自适应高度输入框(contenteditable/textarea)
一.用div模拟textarea div模拟输入域可以根据输入内容自动伸缩,而input和textarea输入内容较多时,高度固定,内容会显示不全. 1.坑1(IOS端无法输入) 在取消全局默认样 ...
- 「疫期集训day13」雾天
我们千里迢迢赶来这里支援协约国----与德军正面交锋的美国士兵 今天考试签到题都没A,失误重大,T1几周前做过的拓扑排序板子都没写,T2失误在没敢调试,对自己信心不足,30分钟写了个DP,几分钟没调出 ...
- Cow Relays,过N条边的最短路
题目链接 题意: 找从a到b的经过N条边的最短路 分析: 有点板子...方法:矩阵存,然后有个类似快速幂的思想,然后再加上离散化就好了. 没啥写的,只能说说矩阵了,我用的方法是先枚举i,j再枚举k,当 ...
- 基于tcp/udp协议的套接字通信
目录 一.套接字分类 二.套接字的工作流程 三.基于tcp协议的套接字 四.基于udp协议的套接字 一.套接字分类 1.基于文件类型的套接字家族:AF_UNIX 2.基于网络类型的套接字家族:AF_I ...
- 论TEMP临时变量与VAR静态变量区别
TEMP临时变量:顾名思义,这种变量类型是临时的,没有固定的存放数据的内存空间.每次扫描结束后则清零,在下个扫描周期开始时,这个变量的值都是不确定的,一般为0.使用临时变量需要遵循一个原则:先赋值再使 ...
- python 爬虫由于网络或代理不能用导致的问题处理方法
平时在爬取某些网页的时候,可能是由于网络不好或者代理池中的代理不能用导致请求失败.此时有们需要重复多次去请求,python中有现成的,相应的包供我们使用: 我们可以利用retry模块进行多次请求,如果 ...
- java 面向对象(二十):类的结构:代码块
类的成员之四:代码块(初始化块)(重要性较属性.方法.构造器差一些)1.代码块的作用:用来初始化类.对象的信息2.分类:代码块要是使用修饰符,只能使用static分类:静态代码块 vs 非静态代码块3 ...
- 数据可视化之powerBI技巧(十二)学会这几个度量值,轻松获取前N名
数据中的明细项一般都有很多,可是我们关注的往往只是前几名,所以在报表中只展示关注的部分,就十分常用. 有了上篇(这几个示例,帮你深入理解RANKX排名)关于排名的铺垫,仅显示前N名就简单多了. 依然以 ...
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- StringTable结构以及基本调优
StringTable底层实现类似于HashTable,由数组和链表组成,数组又称为桶数组.比如有这样一段代码: public class Demo4 { public static void mai ...