北京清北 综合强化班 Day1
a
【问题描述】
你是能看到第一题的 friends呢。
—— hja
何大爷对字符串十分有研究,于是天出题虐杀 zhx。何大爷今天为 何大爷今天为 字符串定义了新的权值计算方法。一个由小写母组成,被定义为其中出现次数最多的字符减去少。(注 被定义为其中出现次数最多的字符减去少。(注 意,在讨论出现最少的字符时候该必须至一次)何大爷给你一个字符串,何大爷想知道这的所有子中权值最是多少?
【输入格式】
第一行一个整数n,代表字符串的长度。
接下来一行n个小写字母,代表该字符串。
【输出格式】
一行个整数代表答案。
【样例输入】
10
aabbaaabab
【样例输出】
3
【数据范围与规定】
对于 30%的数据, 1≤n≤100。
对于 60%的数据, 1≤n≤1000。
对于 100%的数据, 1≤n≤106.
题目大意:
求一个字符串子串的最多出现次数 减去 最少出现次数的 最大值
思路:
1.爆搜
2.正解:前缀和进行求解
枚举右端点,使用前缀和优化。
加入我们选定一段区间l~r,并且假设出现次数最多的为x,最少的为z,用一个数组sum[]统计一个字母到当前位置出现的次数,那么出现次数最多的字母与最少字母的差值显然为:
sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1])
==> sum[x][r]-sum[z][r]-sum[x][l-1]+sum[z][l-1]
==> (sum[x][r]-sum[z][r])-(sum[x][l-1]-sum[z][l-1])
然后你可以发现:前面括号中的跟后面括号中的本质上是一个东西的,长的一毛一样,只是后面的区间端点不同而已。
但是又因为l-1一定是比r要小的,所以l-1一定会在枚举r之前就已经被处理出来;
所以现在我们需要知道的就只有x和z到底是谁就ok:
我们枚举每一个点,然后再枚举另一个字母,处理出最大的sum[x][r]-sum[z][r](r是我们要枚举的位置,x是这个位置上的字母,y是枚举的另一字母)。
用来更新最大值,这样的话我们枚举出来的字母就会出现两种情况,要么x比z多,要么z比x多。
所以我们取一个最大值来更新答案,又因为这里的sum[x][l-1]-sum[y][l-1]是前面预处理出来的,所以每次在枚举到的位置取一最小值储存一下,并且记录是在什么时候更新的这个最小值。
并且还要注意的是:
当last[j]==(pos[j][now] || pos[now][j])时,如果减去的话就会直接把j这个字母消去,所以在后半段我们需要把这个多减去的1加上。
后面一部分是加没错了,可是对于前面来说就是减去1,因为(sum[x][r]-sum[z][r])-(sum[x][l-1]-sum[z][l-1])嘛!
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#define INF 0x7fffffff
using namespace std; const int Ms = ;
const int Ys = ;
int n,ans,p,maxx,minn=INF;
char sr[Ms];
int s[Ys]; int max(int a,int b)
{ return a > b ? a : b; } int dfs(int op,int ed,int now) {
if(ed==n) return ans;
s[now]++;
maxx=,minn=INF;
for(int i=; i<Ys; ++i) {
if(s[i]==) continue;
if(s[i]>maxx) maxx=s[i];
if(s[i]<minn) minn=s[i];
}
if(maxx-minn>ans) ans=maxx-minn;
ed++;
dfs(op,ed,sr[ed]-);
} int main() {
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%d",&n);
for(int i=; i<n; ++i)
cin>>sr[i];
for(int i=; i<n; ++i) {
p=max(p,dfs(i,i,sr[i]-));
memset(s,,sizeof(s));
maxx=,minn=INF,ans=;
}
printf("%d",p);
return ;
}
60爆搜dfs
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std; const int N = ;
const int M = ;
char ch[M];
int n,now,ans;
int sum[N],last[N],pos[N][N],minn[N][N]; int main() {
scanf("%d",&n);
cin>>ch+; //从1开始输入
for(int i=; i<=n; ++i) {
now=ch[i]-'a';
last[now]=i; //枚举的这段距离中now最后一次出现的位置
sum[now]++; //记录出现次数
for(int j=; j<N; ++j)
if(now!=j && sum[j]) {
int tmp=ans;
ans=max(sum[now]-sum[j]-minn[now][j]-(last[j]==pos[now][j]),
sum[j]-sum[now]-minn[j][now]-(last[j]==pos[j][now]));
ans=max(ans,tmp);
}
for(int j=; j<N; ++j) {
if(sum[now]-sum[j]<minn[now][j])
minn[now][j]=sum[now]-sum[j],pos[now][j]=i;
if(sum[j]-sum[now]<minn[j][now])
minn[j][now]=sum[j]-sum[now],pos[j][now]=i;
}
}
printf("%d\n",ans);
return ;
}
AC
b
【问题描述】
你是能看到第二题的 friends呢。
—— laekov
Hja和 Yjq在玩捉迷藏。 在玩捉迷藏。 Yjq躲了起来, Hja要找他。
在们玩游戏的房间 里,只有一堵不透明的墙和个双面镜子。 Hja和 Yjq可以看作平面上坐标分 别为 (xv,yv)和(xp,yp)的点。
墙是一条连接 (xw1,yw1)和(xw2,yw2)的线段,镜子是一条连接 (xm1,ym1)和(xm2,ym2)的线段。
如果 视线和障碍物有公共点,那么我们认为会被阻挡,无法看见。
如果视线和镜子有公共点,那么我们认为发生了反射。
反射的过程遵循物理规律 —— 入射角等于反射角,且反射光线与入射光线在镜子同侧。
也就是说想要看见对方, Hja和 Yjq必须在镜子的同一侧,包括所直线上(参见样例1)。
如果 视线与镜子重合,那么不会发生反射,并且被当作障碍物(参见样例4)。
Hja很想知道他站在原地能否看见 Yjq,,帮助他解决这个问题。
【输入格式】
第一行两个数 xv,yv,表示 Hja的坐标。
第二行两个数 xp,yp,表示 Yjq的坐标。
第三行四个数 xw1,yw1,xw2,yw2,分别表示墙的两个端点坐标。
第四行四个数 xm1,ym1,xm2,ym2,分别表示镜子的两个端点坐标。
【输出格式】
如果 Hja站在原地能看到 Yjq,则输出 "YES",否则输出 "NO"。
【样例输入1】
-1 3
1 3
0 2 0 4
0 0 0 1
【样例输出1】
NO
【样例输入2】
0 0
1 1
0 1 1 0
-100 -100 -101 -101
【样例输出2】
NO
【样例输入3】
0 0
1 1
0 1 1 0
-1 1 1 3
【样例输出3】
YES
【数据规模与约定】
对于100%的数据,所有坐标均为绝对值不超过10 4 的整数。输入的线段不会退化成点,且两条线段没有交点。Hja 和 Yjq 的位置不同,且不在任何一条线段上。
思路:
据说是最简单的计算几何呢(OvO)
我悄悄的告诉你:
其实输出YES有46分233,输出NO就更多了!有54分!
这题我选择弃疗qwq
上代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std; const double eps=1e-; int sgn(double a) {
if (fabs(a)<eps) return ;
else {
if (a>0.0) return ;
else return -;
}
} struct point {
double x,y;
point() {}
point(double a,double b) {
x=a;
y=b;
}
void init() {
scanf("%lf%lf",&x,&y);
}
point operator+(const point &a)const {
point ans;
ans.x=x+a.x;
ans.y=y+a.y;
return ans;
}
point operator-(const point &a)const {
point ans;
ans.x=x-a.x;
ans.y=y-a.y;
return ans;
}
point operator*(const double &a)const {
point ans;
ans.x=x*a;
ans.y=y*a;
return ans;
}
void print() {
printf("%lf %lf\n",x,y);
}
} v,p,w1,w2,m1,m2; double cross(point a,point b) {
return a.x*b.y-a.y*b.x;
} double dot(point a,point b) {
return a.x*b.x+a.y*b.y;
} bool cross(point p1,point p2,point p3,point p4) {
if (sgn(cross(p2-p1,p3-p1))*sgn(cross(p2-p1,p4-p1))==) return false;
if (sgn(cross(p4-p3,p1-p3))*sgn(cross(p4-p3,p2-p3))==) return false;
if (sgn(max(p1.x,p2.x)-min(p3.x,p4.x))==-) return false;
if (sgn(max(p1.y,p2.y)-min(p3.y,p4.y))==-) return false;
if (sgn(max(p3.x,p4.x)-min(p1.x,p2.x))==-) return false;
if (sgn(max(p3.y,p4.y)-min(p1.y,p2.y))==-) return false;
return true;
} point getcross(point p1,point p2,point p3,point p4) {
double a=p2.y-p1.y;
double b=p1.x-p2.x;
double c=-p1.x*p2.y+p1.y*p2.x;
double d=p4.y-p3.y;
double e=p3.x-p4.x;
double f=-p3.x*p4.y+p3.y*p4.x;
double x=(b*f-c*e)/(a*e-b*d);
double y=(a*f-c*d)/(b*d-a*e);
return point(x,y);
} point calcfoot(point p1,point p2,point p3) {
double ratio=dot(p1-p2,p3-p2)/dot(p3-p2,p3-p2);
return p2+(p3-p2)*ratio;
} bool check() {
if (!cross(v,p,w1,w2)) {
if (!cross(v,p,m1,m2)) return true;
if (sgn(cross(m1-v,m2-v))== && sgn(cross(m1-p,m2-p)==)) return true;
}
if (sgn(cross(m2-m1,v-m1))*sgn(cross(m2-m1,p-m1))==) {
point foot=calcfoot(p,m1,m2);
foot=foot*2.0-p;
if (cross(v,foot,m1,m2)) {
foot=getcross(v,foot,m1,m2);
if (!cross(v,foot,w1,w2) && !cross(foot,p,w1,w2)) return true;
}
}
return false;
} int main() {
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
v.init();
p.init();
w1.init();
w2.init();
m1.init();
m2.init();
if (check()) printf("YES\n");
else printf("NO\n");
return ;
}
正解
c
【问题描述】
你是能看到第三题的 friends呢。
—— aoao
众所周知,八数码问题是一个非常难的问题,但是Yjq非常有面子,他把这道题简化了一番。现在给了你一个3×3的方格图,你的目标是通过不断移动使得相邻颜色的块形成联通块。你每次的移动方式是选择一列或者一行进行置换滑动(这个解释起来比较麻烦,看下面的图就懂了)。所谓置换滑动,就是所有格子沿着给定的方向顺次移动,最后一个格子会被置换到最前面的过程。现在给定整个方格图,以及每个格子是否能够移动,求使得相同颜色联通的最小步数。
【输入格式】
输入为3×3的方格图,每个位置由五个字符组成,前四个字符分别表示上下左右四个部分的颜色,第五个字符表示该格子是否能够移动,其中0是能移动1是不能移动。
【输出格式】
一行个整数代表答案。
思路:
bfs+并查集
(可以把3*3的矩阵转换为6*6的点阵来进行做,查看是否连通)
还需要注意的是储存颜色!
题目意思:
红线==>蓝线+紫线+橙线
注意:
存有精度的数的时候,
一定要使用double,
别使用float!!!
float太坑了、、、
上代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#define get(a,b,c) ((a-1)*12+(b-1)*4+c)
using namespace std; int en,tmp[][],color[],map[][],q[],nowmap[][],newmap[][];
bool num[],use[],right[],row[],col[],col_find[];
char s[];
struct rec {
int sta,step;
rec() {}
rec(int a,int b) {
sta=a;
step=b;
}
};
queue<rec> que;
struct edge {
int e;
edge *next;
}*v[],ed[]; void add_edge(int s,int e) {
en++;
ed[en].next=v[s];
v[s]=ed+en;
v[s]->e=e;
en++;
ed[en].next=v[e];
v[e]=ed+en;
v[e]->e=s;
} bool check(int nows) {
memset(num,false,sizeof(num));
for(int a=; a>=; a--)
for(int b=; b>=; b--)
if(a!= || b!=) {
tmp[a][b]=nows%;
num[nows%]=true;
nows/=;
}
for(int a=; a<; a++)
if(!num[a]) {
tmp[][]=a;
break;
}
int cnt=;
for(int a=; a<=; a++)
for(int b=; b<=; b++)
for(int c=; c<=; c++) {
cnt++;
color[cnt]=map[tmp[a][b]][c];
}
memset(right,false,sizeof(right));
memset(col_find,false,sizeof(col_find));
for(int a=; a<=; a++)
if(!right[a]) {
if(col_find[color[a]]) return false;
col_find[color[a]]=true;
int front=,tail=;
q[]=a;
right[a]=true;
for( ; front<=tail; ) {
int now=q[front++];
for(edge *e=v[now]; e; e=e->next)
if(color[e->e]==color[now] && !right[e->e]) {
right[e->e]=true;
q[++tail]=e->e;
}
}
}
return true;
} int main() {
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
for(int a=; a<=; a++)
for(int b=; b<=; b++) {
add_edge(get(a,b,),get(a,b,));
add_edge(get(a,b,),get(a,b,));
add_edge(get(a,b,),get(a,b,));
add_edge(get(a,b,),get(a,b,));
if (a!=) add_edge(get(a,b,),get(a+,b,));
if (b!=) add_edge(get(a,b,),get(a,b+,));
}
int cnt=;
for(int a=; a<=; a++)
for(int b=; b<=; b++) {
scanf("%s",s+);
for(int c=; c<=; c++)
if(s[c]=='R') map[cnt][c]=;
else {
if(s[c]=='G') map[cnt][c]=;
else {
if(s[c]=='B') map[cnt][c]=;
else map[cnt][c]=;
}
}
if(s[]=='') row[a]=col[b]=true;
cnt++;
}
int nows=;
if (check(nows)) {
printf("0\n");
return ;
}
que.push(rec(nows,));
use[nows]=true;
rec now;
while (que.size()) {
now=que.front();
que.pop();
int step=now.step;
int nows=now.sta;
memset(num,false,sizeof(num));
for(int a=; a>=; a--)
for(int b=; b>=; b--)
if(a!= || b!=) {
nowmap[a][b]=nows%;
num[nows%]=true;
nows/=;
}
for(int a=; a<; a++)
if(!num[a]) {
nowmap[][]=a;
break;
}
int news=;
for(int a=; a<=; a++) {
if(!row[a]) {
for(int b=; b<=; b++)
for(int c=; c<=; c++)
newmap[b][c]=nowmap[b][c];
int x=newmap[a][];
newmap[a][]=newmap[a][];
newmap[a][]=newmap[a][];
newmap[a][]=x;
news=;
for (int b=; b<=; b++)
for (int c=; c<=; c++)
if (b!= || c!=) news=news*+newmap[b][c];
if (!use[news]) {
use[news]=true;
if (check(news)) {
printf("%d\n",step+);
return ;
}
que.push(rec(news,step+));
}
x=newmap[a][];
newmap[a][]=newmap[a][];
newmap[a][]=newmap[a][];
newmap[a][]=x;
news=;
for (int b=; b<=; b++)
for (int c=; c<=; c++)
if (b!= || c!=) news=news*+newmap[b][c];
if (!use[news]) {
use[news]=true;
if (check(news)) {
printf("%d\n",step+);
return ;
}
que.push(rec(news,step+));
}
}
if(!col[a]) {
for(int b=; b<=; b++)
for(int c=; c<=; c++)
newmap[b][c]=nowmap[b][c];
int x=newmap[][a];
newmap[][a]=newmap[][a];
newmap[][a]=newmap[][a];
newmap[][a]=x;
news=;
for(int b=; b<=; b++)
for(int c=; c<=; c++)
if(b!= || c!=) news=news*+newmap[b][c];
if(!use[news]) {
use[news]=true;
if(check(news)) {
printf("%d\n",step+);
return ;
}
que.push(rec(news,step+));
}
x=newmap[][a];
newmap[][a]=newmap[][a];
newmap[][a]=newmap[][a];
newmap[][a]=x;
news=;
for(int b=; b<=; b++)
for(int c=; c<=; c++)
if(b!= || c!=) news=news*+newmap[b][c];
if(!use[news]) {
use[news]=true;
if(check(news)) {
printf("%d\n",step+);
return ;
}
que.push(rec(news,step+));
}
}
}
}
return ;
}
正解
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define get(i,j,k) ((i-1)*12+(j-1)*4+k)
using namespace std; const int D = ;
const int T = ;
const int Fx = ;
const int Nine = ;
int tmpmap[T][T],color[D],q[D];
int map[Nine][Fx],nowmap[T][T],nxtmap[T][T];
bool num[Nine],vis[Nine*],ok[D];
bool row[T],col[T],Findcol[Fx];
char s[];
struct rec {
int op,step; //起点,步数
rec() {}
rec(int a,int b) {
op=a;
step=b;
}
};
queue <rec> que; struct edge {
int to,next;
} e[];
int top,head[D];
void Add(int u,int v) {
top++;
e[top].to=v,e[top].next=head[u],head[u]=top;
top++;
e[top].to=u,e[top].next=head[v],head[v]=top;
} bool check(int nows) {
memset(num,false,sizeof(num));
for(int i=; i>=; --i)
for(int j=; j>=; --j)
if(i!= || j!=) {
tmpmap[i][j]=nows%;
num[nows%]=true;
nows/=;
}
for(int i=; i<Nine; ++i) //(压维)处理最后一位数字
if(!num[i]) {
tmpmap[][]=i;
break;
}
int cnt=;
for(int i=; i<T; ++i)
for(int j=; j<T; ++j)
for(int k=; k<Fx; ++k) {
cnt++;
color[cnt]=map[tmpmap[i][j]][k]; //按顺序记录颜色
}
memset(ok,false,sizeof(ok));
memset(Findcol,false,sizeof(Findcol));
for(int i=; i<D; ++i)
if(!ok[i]) {
if(Findcol[color[i]]) return false;
Findcol[color[i]]=true;
int h=,t=;
q[t]=i;
ok[i]=true;
while(h<=t) {
int u=q[h++];
for(int j=head[u]; j; j=e[j].next) {
int v=e[j].to;
if(color[v]==color[u] && !ok[v]) {
ok[v]=true;
q[++t]=v;
}
}
}
}
return true;
} int main() {
for(int i=; i<T; ++i)
for(int j=; j<T; ++j) {
Add(get(i,j,),get(i,j,));
Add(get(i,j,),get(i,j,));
Add(get(i,j,),get(i,j,));
Add(get(i,j,),get(i,j,));
if(i!=) Add(get(i,j,),get(i+,j,));
if(j!=) Add(get(i,j,),get(i,j+,));
}
int cnt=;
for(int i=; i<T; ++i)
for(int j=; j<T; ++j) {
scanf("%s",s+);
for(int k=; k<Fx; ++k)
if(s[k]=='R') map[cnt][k]=;
else {
if(s[k]=='G') map[cnt][k]=;
else {
if(s[k]=='B') map[cnt][k]=;
else map[cnt][k]=;
}
}
if(s[]=='') row[i]=col[j]=true; //固定
cnt++;
}
int nows=;
if(check(nows)) {
printf("0\n");
return ;
}
que.push(rec(nows,));
vis[nows]=true;
rec now;
while(!que.empty()) {
now=que.front();
que.pop();
int step=now.step,nows=now.op;
memset(num,false,sizeof(num));
for(int i=; i>=; --i)
for(int j=; j>=; --j)
if(i!= || j!=) {
nowmap[i][j]=nows%;
num[nows%]=true;
nows/=;
}
for(int i=; i<Nine; ++i) //(压维)处理最后一位数字
if(!num[i]) {
nowmap[][]=i;
break;
}
int nxt=;
for(int i=; i<T; ++i) {
if(!row[i]) {
for(int j=; j<T; ++j)
for(int k=; k<T; ++k)
nxtmap[j][k]=nowmap[j][k];
int tmp=nxtmap[i][];
nxtmap[i][]=nxtmap[i][];
nxtmap[i][]=nxtmap[i][];
nxtmap[i][]=tmp;
nxt=;
for(int j=; j<T; ++j)
for(int k=; k<T; ++k)
if(j!= || k!=)
nxt=nxt*+nxtmap[j][k];
if(!vis[nxt]) {
vis[nxt]=true;
if(check(nxt)) {
printf("%d\n",step+);
return ;
}
que.push(rec(nxt,step+));
}
tmp=nxtmap[i][];
nxtmap[i][]=nxtmap[i][];
nxtmap[i][]=nxtmap[i][];
nxtmap[i][]=tmp;
nxt=;
for(int j=; j<T; ++j)
for(int k=; k<T; ++k)
if(j!= || k!=)
nxt=nxt*+nxtmap[j][k];
if(!vis[nxt]) {
vis[nxt]=true;
if(check(nxt)) {
printf("%d\n",step+);
return ;
}
que.push(rec(nxt,step+));
}
}
if(!col[i]) {
for(int j=; j<T; ++j)
for(int k=; k<T; ++k)
nxtmap[j][k]=nowmap[j][k];
int tmp=nxtmap[][i];
nxtmap[][i]=nxtmap[][i];
nxtmap[][i]=nxtmap[][i];
nxtmap[][i]=tmp;
nxt=;
for(int j=; j<T; ++j)
for(int k=; k<T; ++k)
if(j!= || k!=)
nxt=nxt*+nxtmap[j][k];
if(!vis[nxt]) {
vis[nxt]=true;
if(check(nxt)) {
printf("%d\n",step+);
return ;
}
que.push(rec(nxt,step+));
}
tmp=nxtmap[][i];
nxtmap[][i]=nxtmap[][i];
nxtmap[][i]=nxtmap[][i];
nxtmap[][i]=tmp;
nxt=;
for(int j=; j<T; ++j)
for(int k=; k<T; ++k)
if(j!= || k!=)
nxt=nxt*+nxtmap[j][k];
if(!vis[nxt]) {
vis[nxt]=true;
if(check(nxt)) {
printf("%d\n",step+);
return ;
}
que.push(rec(nxt,step+));
}
}
}
}
return ;
}
/*
GGGG0 GGGG0 GGGG0
OGOO0 GGGG0 OGOO0
OOOO0 OGGG1 OOOO0
*/
mine
北京清北 综合强化班 Day1的更多相关文章
- 2017.10.1北京清北综合强化班DAY1
a[问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx. 何大爷今天为字符串定义了新的权值计算方法.一个字符串 由小写字母组成,字符串 ...
- 2017.10.3北京清北综合强化班DAY3
括号序列(bracket) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的 ...
- 2017.10.4北京清北综合强化班DAY4
财富(treasure) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...
- 2017.10.7北京清北综合强化班DAY7
1.计数 (count.cpp/c/pas) 时间限制:1s 内存限制:256MB [问题描述] 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍 ...
- 2017.10.6北京清北综合强化班DAY6
题目大意:改变一个数的位置 把一个序列变成不下降序列 题解: 设置一个pre,如果破坏单调性,就把‘删除’这个.否则把pre修改为当前元素的值. 考试时这样得了90分,是因为我的做法只能过这样的数据 ...
- 2017.10.5北京清北综合强化班DAY5
拼不出的数lost.in/.out/.cpp[问题描述]3 个元素的集合{5, 1,2} 的所有子集的和分别是0,1, 2, 3, 5, 6, 7, 8.发现最小的不能由该集合子集拼出的数字是4.现在 ...
- 2017.10.2北京清北综合强化班DAY2
a[问题描述]你是能看到第一题的 friends呢. —— hja世界上没有什么比卖的这 贵弹丸三还令人绝 ...
- 北京清北 综合强化班 Day5
T1 思路: 输入数据,sort一下, 如果a[i]>sum+1(前缀和) 那么sum+1就一定不会被拼出来, 然后输出即可. 上代码: #include <iostream> #i ...
- 北京清北 综合强化班 Day4
财富(treasure) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有n个小伙伴.每个小伙伴有一个身高hi. 这个游戏是这样的,LYK生活的环境是以 ...
随机推荐
- logstash grok
input { file { path => "/opt/service/test-service/logs/catalina-error*.log" type => ...
- macos catalina安装python3
之前跟着教程用brow安装了python3,后来发现电脑上有三个版本的python,头大. 于是用brew uninstall --force python3卸掉了python3 看到现在有两个版本 ...
- Python3 + selenium + Chrome浏览器(webdriver.Chrome()报错)
Python3 + selenium + Chrome浏览器 Error: selenium.common.exceptions.WebDriverException: Message: 'chrom ...
- 【组成原理】BYTE ME!
题目描述 Parity is an important concept in data transmission. Because the process is not error proof, p ...
- 牛客 216 C 小K的疑惑
大意: 给定树, 求多少个三元组(i,j,k), 满足dis(i,j)=dis(j,k)=dis(k,i). 刚开始想复杂了, 暴力统计了所有的情况. #include <iostream> ...
- 怎样理解AJAX
AJAX: Asynchronous JavaScript and XML, 翻译过来就是: 异步的JavaScript与XML 这已经成为了一个通用名词, 字面意义已经消失了, 因为现在使用Java ...
- python+django学习四
1.setting.py中设置好 STATIC_URL = '/static/'STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] 前端文件存 ...
- 【原创】大叔经验分享(80)openresty(nginx+lua)发邮件
nginx配置 lua_package_path "/usr/local/openresty/lualib/resty/smtp/?.lua;;"; lua_need_reques ...
- Linux与Windows的设备驱动模型对比
Linux与Windows的设备驱动模型对比 名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Bi ...
- python selenium5 模拟点击+拖动+按照指定相对坐标拖动 58同城验证码
#!/usr/bin/python # -*- coding: UTF-8 -*- # @Time : 2019年12月9日11:41:08 # @Author : shenghao/10347899 ...