题面:https://www.cnblogs.com/Juve/articles/11752338.html https://www.cnblogs.com/Juve/articles/11752414.html

最近咕的稍多,就简单写一下题解了(其实也不算题解),反正就是一句话,而且都是这几套题改完的

模拟87:

maze:

在实数上二分,跑最短路check,spfa比dij快多l

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#define int long long
using namespace std;
const int MAXN=;
int n,m,sx,sy,tx,ty;
int dx[]={,,,-};
int dy[]={,-,,};
bool mp[MAXN][MAXN],vis[MAXN*MAXN];
double s,dis[MAXN*MAXN],l,r,ans;
int calc(int x,int y){
return (x-)*m+y;
}
queue< pair<int,int> >qu;
double spfa(int x,int y,double k){
for(int i=;i<=n;++i)
for(int j=;j<=m;++j) dis[calc(i,j)]=1e11;
//printf("%0.0lf\n",dis[1]);
memset(vis,,sizeof(vis));
int st=calc(x,y);
dis[st]=0.0;
qu.push(make_pair(x,y));
vis[st]=;
while(!qu.empty()){
pair<int,int>p=qu.front();
qu.pop();
int xx=p.first,yy=p.second;
st=calc(xx,yy);
for(int i=;i<;++i){
int a=xx+dx[i],b=yy+dy[i];
if(mp[a][b]==||a<||b<||a>n||b>m) continue;
int c=calc(a,b);
if(i<){
if(dis[c]>dis[st]+1.0){
dis[c]=dis[st]+1.0;
if(!vis[c]) qu.push(make_pair(a,b));
}
}else{
if(dis[c]>dis[st]+k){
dis[c]=dis[st]+k;
if(!vis[c]) qu.push(make_pair(a,b));
}
}
}
vis[st]=;
}
return dis[calc(tx,ty)];
}
priority_queue< pair<double, pair<int,int> > > q;
double dijkstra(int x,int y,double k){
for(int i=;i<=n;++i)
for(int j=;j<=m;++j) dis[calc(i,j)]=1e11;
//printf("%0.0lf\n",dis[1]);
memset(vis,,sizeof(vis));
int st=calc(x,y);
dis[st]=0.0;
q.push(make_pair(0.0,make_pair(x,y)));
while(!q.empty()){
pair<int,int>p=q.top().second;
q.pop();
int xx=p.first,yy=p.second;
st=calc(xx,yy);
if(vis[st]) continue;
vis[st]=;
for(int i=;i<;++i){
int a=xx+dx[i],b=yy+dy[i];
if(mp[a][b]==||a<||b<||a>n||b>m) continue;
int c=calc(a,b);
if(i<){
if(dis[c]>dis[st]+1.0){
dis[c]=dis[st]+1.0;
q.push(make_pair(-dis[c],make_pair(a,b)));
}
}else{
if(dis[c]>dis[st]+k){
dis[c]=dis[st]+k;
q.push(make_pair(-dis[c],make_pair(a,b)));
}
}
}
}
//cout<<calc(tx,ty)<<' '<<dis[calc(tx,ty)]<<endl;
return dis[calc(tx,ty)];
}
signed main(){
//freopen("test.in","r",stdin);
scanf("%lld%lld",&n,&m);
scanf("%lld%lld%lld%lld",&sx,&sy,&tx,&ty);
for(int i=;i<=n;++i){
for(int j=,x;j<=m;++j){
scanf("%lld",&x);
mp[i][j]=x;
}
}
scanf("%lf",&s);
l=,r=s;
while(fabs(r-l)>1e-){
double mid=(r+l)/2.0;
if(dijkstra(sx,sy,mid)<=s) ans=mid,l=mid;
else r=mid;
}
printf("%0.3lf\n",ans);
return ;
}

bird:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=5e5+;
int n,k,tot=,f[MAXN],maxx=,ans=;
struct node{
int l,r;
friend bool operator < (node p,node q){
return p.r==q.r?p.l<q.l:p.r<q.r;
}
}b[MAXN];
int c[MAXN],num[MAXN],d[MAXN],in[MAXN];
int max(int a,int b){
return a>b?a:b;
}
int tr[MAXN<<],laz[MAXN<<];
void down(int k){
tr[k<<]+=laz[k],tr[k<<|]+=laz[k];
laz[k<<]+=laz[k],laz[k<<|]+=laz[k];
laz[k]=;
}
void update(int k,int l,int r,int pos,int val){
if(l==r){
tr[k]=val;
return ;
}
if(laz[k]) down(k);
int mid=(l+r)>>;
if(pos<=mid) update(k<<,l,mid,pos,val);
else update(k<<|,mid+,r,pos,val);
tr[k]=max(tr[k<<],tr[k<<|]);
}
void update(int k,int l,int r,int opl,int opr,int val){
if(opl<=l&&r<=opr){
tr[k]+=val,laz[k]+=val;
return ;
}
if(laz[k]) down(k);
int mid=(l+r)>>;
if(opl<=mid) update(k<<,l,mid,opl,opr,val);
if(opr>mid) update(k<<|,mid+,r,opl,opr,val);
tr[k]=max(tr[k<<],tr[k<<|]);
}
int query(int k,int l,int r,int opl,int opr){
if(opl<=l&&r<=opr) return tr[k];
if(laz[k]) down(k);
int mid=(l+r)>>,res=;
if(opl<=mid) res=max(res,query(k<<,l,mid,opl,opr));
if(opr>mid) res=max(res,query(k<<|,mid+,r,opl,opr));
return res;
}
signed main(){
scanf("%lld%lld",&n,&k);
for(int i=,l,r;i<=n;++i){
scanf("%lld%lld",&l,&r);
if(r<) continue;
l=max(,l);++l,++r;
b[++tot]=(node){l,r};
++d[l],--d[r+],++in[l];
maxx=max(maxx,r+);
}
sort(b+,b+tot+);
for(int i=;i<=maxx;++i) d[i]+=d[i-];
int now=,p=;
for(int i=;i<=maxx;++i){
f[i]=d[i]+query(,,maxx,max(,i-*k),max(,i-k));
ans=max(f[i],ans);
now+=in[i];
update(,,maxx,i,f[i]-now);
while(p<=tot&&b[p].r==i){
--now;
update(,,maxx,b[p].l,b[p].r,);
++p;
}
}
printf("%lld\n",ans);
return ;
}

stone:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=1e6+;
int n,m,ans=,l[MAXN],r[MAXN],sum[][][MAXN];
char s1[MAXN],s2[MAXN];
signed main(){
scanf("%s%s",s1+,s2+);
n=strlen(s1+),m=strlen(s2+);
int p=;
for(int i=;i<=n;++i){
l[i]=p;
if(s1[i]==s2[p]) ++p;
}
p=;
for(int i=;i<=m;++i){
if(s2[i]==s1[p]) ++p;
r[p]=min(i+,m);
}
if(r[]==) r[]=;
for(int i=;i<=n;++i){
if(!r[i]) r[i]=m;
ans+=r[i]-l[i]+;
}
for(int i=;i<=m;++i){
for(int k1=;k1<;++k1)
for(int k2=;k2<;++k2){
sum[k1][k2][i]=sum[k1][k2][i-];
}
++sum[s2[i]-'A'][s2[i-]-'A'][i];
}
for(int i=;i<=n;++i){
if(s1[i-]!=s1[i])
ans-=sum[s1[i-]-'A'][s1[i]-'A'][r[i]]-sum[s1[i-]-'A'][s1[i]-'A'][l[i]-];
//cout<<i<<' '<<ans<<' '<<s1[i-1]-'A'<<' '<<s1[i]-'A'<<endl;
}
printf("%lld\n",ans);
return ;
}

模拟88:

军训队列:

排序一定不会更劣,

设f[i][j]表示前i个分了j个队列的最小值,则有方程:$f[i][j]=min(f[p][j-1]+(a[i]-a[p])^2),p\in[1,i]$

然后我们发现值域很小,unique后就能过了,当然也可以斜率优化

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=1e5+;
int n,k;
double a[MAXN],f[MAXN][],ans;
signed main(){
scanf("%lld%lld",&n,&k);
memset(f,,sizeof(f));
for(int i=;i<=n;++i){
scanf("%lf",&a[i]);
}
f[][]=;
sort(a+,a+n+);
n=unique(a+,a+n+)-a-;
for(int i=;i<=n;++i){
for(int j=;j<=min(i,k);++j)
for(int p=;p<=i;++p){
f[i][j]=min(f[i][j],f[p-][j-]+(a[i]-a[p])*(a[i]-a[p]));
}
}
printf("%0.2lf\n",f[n][min(n,k)]);
return ;
}

山屋惊魂:模拟+概率

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
double res[][],f[][][][][],ans[][],dead;
char ch[];
int p[],ww[][],n;
int cal(){
if(ch[]=='M') return ;
else if(ch[]=='p') return ;
else if(ch[]=='a') return ;
else return ;
}
int calc(){
int len=strlen(ch+);
if(len==){
if(ch[]=='>') return ;
else return ;
}else{
if(ch[]=='<') return ;
else return ;
}
}
void work1(int tim,int pos,int val){
for(int i=;i<=;++i){
for(int j=;j<=;++j){
for(int p=;p<=;++p){
for(int q=,now;q<=;++q){
if(pos==){
if(i+val<=) continue;
now=min(,i+val);
f[tim][now][j][p][q]+=f[tim-][i][j][p][q];
}else if(pos==){
if(j+val<=) continue;
int now=min(,j+val);
f[tim][i][now][p][q]+=f[tim-][i][j][p][q];
}else if(pos==){
if(p+val<=) continue;
now=min(,p+val);
f[tim][i][j][now][q]+=f[tim-][i][j][p][q];
}else{
if(q+val<=) continue;
now=min(,q+val);
f[tim][i][j][p][now]+=f[tim-][i][j][p][q];
}
}
}
}
}
}
void work2(int tim,int pos,int flag,int val){
for(int i=;i<=;++i){
for(int j=;j<=;++j){
for(int p=;p<=;++p){
for(int q=,now;q<=;++q){
for(int k=;k<=*val;++k){
if(pos==){
if(i+flag*k<=) continue;
now=min(,i+flag*k);
f[tim][now][j][p][q]+=f[tim-][i][j][p][q]*res[val][k];
}else if(pos==){
if(j+flag*k<=) continue;
int now=min(,j+flag*k);
f[tim][i][now][p][q]+=f[tim-][i][j][p][q]*res[val][k];
}else if(pos==){
if(p+flag*k<=) continue;
now=min(,p+flag*k);
f[tim][i][j][now][q]+=f[tim-][i][j][p][q]*res[val][k];
}else{
if(q+flag*k<=) continue;
now=min(,q+flag*k);
f[tim][i][j][p][now]+=f[tim-][i][j][p][q]*res[val][k];
}
}
}
}
}
}
}
void work3(int tim,int pos1,int fh,int lim,int pos2,int flag,int val){//第几次,用pos1判定,符号,判定的数,给谁改变,加还是减,加或减多少
val*=flag;
for(int i=;i<=;++i){
for(int j=;j<=;++j){
for(int p=;p<=;++p){
for(int q=;q<=;++q){
double ban=0.0;
for(int k=;k<=;++k){
if(fh==){//<
if(pos1==) ban+=(k<lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k<lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k<lim)*res[ww[][p]][k];
else ban+=(k<lim)*res[ww[][q]][k];
}else if(fh==){//<=
if(pos1==) ban+=(k<=lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k<=lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k<=lim)*res[ww[][p]][k];
else ban+=(k<=lim)*res[ww[][q]][k];
}else if(fh==){//>
if(pos1==) ban+=(k>lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k>lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k>lim)*res[ww[][p]][k];
else ban+=(k>lim)*res[ww[][q]][k];
}else{//>=
if(pos1==) ban+=(k>=lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k>=lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k>=lim)*res[ww[][p]][k];
else ban+=(k>=lim)*res[ww[][q]][k];
}
}
f[tim][i][j][p][q]+=(1.0-ban)*f[tim-][i][j][p][q];
int now;
if(pos2==){
if(i+val<=) continue;
now=min(,i+val);
f[tim][now][j][p][q]+=ban*f[tim-][i][j][p][q];
}else if(pos2==){
if(j+val<=) continue;
int now=min(,j+val);
f[tim][i][now][p][q]+=ban*f[tim-][i][j][p][q];
}else if(pos2==){
if(p+val<=) continue;
now=min(,p+val);
f[tim][i][j][now][q]+=ban*f[tim-][i][j][p][q];
}else{
if(q+val<=) continue;
now=min(,q+val);
f[tim][i][j][p][now]+=ban*f[tim-][i][j][p][q];
}
}
}
}
}
}
void work4(int tim,int pos1,int fh,int lim,int pos2,int flag,int val){
for(int i=;i<=;++i){
for(int j=;j<=;++j){
for(int p=;p<=;++p){
for(int q=;q<=;++q){
double ban=0.0;
for(int k=;k<=;++k){
if(fh==){//<
if(pos1==) ban+=(k<lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k<lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k<lim)*res[ww[][p]][k];
else ban+=(k<lim)*res[ww[][q]][k];
}else if(fh==){//<=
if(pos1==) ban+=(k<=lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k<=lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k<=lim)*res[ww[][p]][k];
else ban+=(k<=lim)*res[ww[][q]][k];
}else if(fh==){//>
if(pos1==) ban+=(k>lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k>lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k>lim)*res[ww[][p]][k];
else ban+=(k>lim)*res[ww[][q]][k];
}else{//>=
if(pos1==) ban+=(k>=lim)*res[ww[][i]][k];
else if(pos1==) ban+=(k>=lim)*res[ww[][j]][k];
else if(pos1==) ban+=(k>=lim)*res[ww[][p]][k];
else ban+=(k>=lim)*res[ww[][q]][k];
}
}
f[tim][i][j][p][q]+=(1.0-ban)*f[tim-][i][j][p][q];
for(int k=,now;k<=*val;++k){
if(pos2==){
if(i+flag*k<=) continue;
now=min(,i+flag*k);
f[tim][now][j][p][q]+=ban*f[tim-][i][j][p][q]*res[val][k];
}else if(pos2==){
if(j+flag*k<=) continue;
int now=min(,j+flag*k);
f[tim][i][now][p][q]+=ban*f[tim-][i][j][p][q]*res[val][k];
}else if(pos2==){
if(p+flag*k<=) continue;
now=min(,p+flag*k);
f[tim][i][j][now][q]+=ban*f[tim-][i][j][p][q]*res[val][k];
}else{
if(q+flag*k<=) continue;
now=min(,q+flag*k);
f[tim][i][j][p][now]+=ban*f[tim-][i][j][p][q]*res[val][k];
}
}
}
}
}
}
}
int main(){
res[][]=1.0;
for(int i=;i<=;++i){
for(int j=;j<;++j)
for(int k=j;k<=;++k)
res[i][k]+=res[i-][k-j]/3.0;
}
for(int i=;i<;++i){
scanf("%s",ch+);
for(int j=;j<=;++j)
ww[i][j]=ch[j]-'';
scanf("%d",&p[i]);
}
f[][p[]][p[]][p[]][p[]]=100.0;
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%s",ch+);
int j=cal();
scanf("%s",ch+);
int len=strlen(ch+);
if(len==&&ch[]!='>'&&ch[]!='<'){
int flag=(ch[]=='+')?:-;
int val=ch[]-'';
work1(i,j,flag*val);
}else if(len==){
int flag=(ch[]=='+')?:-;
int val=ch[]-'';
work2(i,j,flag,val);
}else{
int fh=calc(),lim,k;
scanf("%d%s",&lim,ch+);
k=cal();
scanf("%s",ch+);
int len=strlen(ch+);
int flag=(ch[]=='+')?:-;
int val=ch[]-'';
if(len==) work3(i,j,fh,lim,k,flag,val);
else work4(i,j,fh,lim,k,flag,val);
}
}
for(int k=;k<;++k){
for(int i=;i<=;++i)
for(int j=;j<=;++j)
for(int p=;p<=;++p)
for(int q=;q<=;++q){
if(k==) ans[][ww[][i]]+=f[n][i][j][p][q];
if(k==) ans[][ww[][j]]+=f[n][i][j][p][q];
if(k==) ans[][ww[][p]]+=f[n][i][j][p][q];
if(k==) ans[][ww[][q]]+=f[n][i][j][p][q];
}
}
for(int i=;i<=;++i) dead+=ans[][i];
dead=100.0-dead;
printf("%0.2lf\n",dead);
for(int k=;k<;++k){
for(int i=;i<=;++i)
printf("%0.2lf ",ans[k][i]);
puts("");
}
return ;
}

彩球问题:记忆化搜索+高精

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
int n,k[],n1,n2,n3;
bool vis[][][][];
struct bigint{
int m[];
bigint(){
memset(m,,sizeof(m));
m[]=;
}
friend bigint operator + (bigint a,bigint b){
int x=;
bigint c;
c.m[]=max(a.m[],b.m[]);
for(int i=;i<=a.m[]||i<=b.m[];++i){
c.m[i]=a.m[i]+b.m[i]+x;
x=c.m[i]/;
c.m[i]%=;
}
while(x) c.m[++c.m[]]=x%,x/=;
return c;
}
friend void operator += (bigint &a,bigint b){
a=a+b;
}
friend bigint operator * (int a,bigint b){
int x=;
bigint c;
c.m[]=b.m[];
for(int i=;i<=b.m[];++i){
c.m[i]=b.m[i]*a+x;
x=c.m[i]/;
c.m[i]%=;
}
while(x) c.m[++c.m[]]=x%,x/=;
return c;
}
}f[][][][];
void print(bigint a){
for(int i=;i<=a.m[];++i){
printf("%lld",a.m[a.m[]-i+]);
}
puts("");
}
bigint dfs(int i,int j,int k,int x){
bigint res;
res.m[]=res.m[]=;
if(i+j+k==) return res;
if(vis[i][j][k][x]) return f[i][j][k][x];
bigint ans;
if(i) ans+=(i-(x==))*dfs(i-,j,k,);
if(j) ans+=(j-(x==))*dfs(i+,j-,k,);
if(k) ans+=(k-(x==))*dfs(i,j+,k-,);
vis[i][j][k][x]=;
return f[i][j][k][x]=ans;
}
signed main(){
scanf("%lld",&n);
for(int i=;i<=n;++i){
scanf("%lld",&k[i]);
n1+=(k[i]==);
n2+=(k[i]==);
n3+=(k[i]==);
}
print(dfs(n1,n2,n3,));
return ;
}

邻面合并:

状压dp

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,a[][],ans=0x3f3f3f3f;
int b[],f[][(<<)+];
bool judge(int now,int sta){
bool flag=;
for(int i=;i<=m;++i){
if(sta&(<<(i-))) flag=;
if(a[now][i]==&&flag==) return ;
if(!a[now][i]) flag=;
if((sta&(<<(i-)))&&a[now][i]==) return ;
}
return ;
}
int lowbit(int x){
return x&-x;
}
int cal(int sta){
int res=;
while(sta>){
sta-=lowbit(sta);
++res;
}
return res;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i){
for(int j=;j<=m;++j){
scanf("%d",&a[i][j]);
b[i]|=(a[i][j]<<(j-));
}
}
memset(f,0x3f,sizeof(f));
f[][]=;
for(int i=;i<=n;++i){
for(int s1=;s1<(<<m);++s1){
if(!judge(i,s1)) continue;
for(int s2=;s2<(<<m);++s2){
if(!judge(i-,s2)) continue;
int cnt=cal(s1);
for(int j=;j<=m;++j){
if((s1&(<<(j-)))&&(s2&(<<(j-)))){
int pos=j;
while(pos<=m&&a[i][pos]){
if(pos!=j&&(s1&(<<(pos-)))) break;
++pos;
}
--pos;
bool flag=;
if(!(s2&(<<pos)||(!a[i-][pos+]))) flag=;
for(int k=j+;k<=pos;++k){
if(flag) break;
if((s2&(<<(k-)))||(!a[i-][k])) flag=;
}
if(!flag) --cnt;
}
}
f[i][s1]=min(f[i][s1],f[i-][s2]+cnt);
if(i==n) ans=min(ans,f[i][s1]);
}
}
}
printf("%d\n",ans);
return ;
}
/*
4 4
1 1 1 0
1 1 0 1
0 0 1 1
0 0 1 1
4 4 4
1 1 1 0
0 1 1 1
0 1 1 1
0 1 1 1
2 5 4
1 1 0 1
1 1 1 1
1 1 0 1
0 0 1 1
0 0 1 1
4 8 4
1 1 1 1
0 1 0 0
0 1 0 0
1 1 1 0
1 1 1 0
1 1 1 1
0 1 1 1
0 0 1 1
5 8 4
1 1 1 1
0 1 1 0
0 1 0 0
1 1 1 0
1 1 1 0
1 1 1 1
0 1 1 1
0 0 1 1
6 4 11
1 1 1 0 1 1 0 0 1 0 0
1 1 0 0 1 1 0 0 1 1 0
1 0 0 0 1 0 0 0 1 1 1
1 1 1 1 1 0 0 1 1 0 0
*/

123567:

杜教筛,啥都不会

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<unordered_map>
#include<cmath>
#define re register
using namespace std;
long long n,ans;
int N,prime[],tot=;
unordered_map<int,int>mp;
short mu[];
bool vis[];
inline void get_mu(re int N){
vis[]=mu[]=;
for(re int i=;i<=N;++i){
if(!vis[i]) prime[++tot]=i,mu[i]=-;
for(re int j=;i*prime[j]<=N;++j){
vis[i*prime[j]]=;
if(!(i%prime[j])) break;
mu[i*prime[j]]=-mu[i];
}
mu[i]+=mu[i-];
}
}
inline int sum(re int x){
if(x<=N) return mu[x];
if(mp.find(x)!=mp.end()) return mp[x];
re int res=;
for(re int l=,r;l<=x;l=r+){
r=x/(x/l);
res=res-sum(x/r)*(r-l+);
}
return mp[x]=res;
}
signed main(){
scanf("%lld",&n);
N=min(1e7,sqrt(n));
get_mu(N);
for(re long long l=,r;l*l<=n;l=r+){
r=sqrt(n/(n/(l*l)));
ans=ans+n/(r*r)*(sum(r)-sum(l-));
}
printf("%lld\n",ans);
return ;
}

csps模拟87888990部分题解的更多相关文章

  1. CSP-S 模拟测试94题解

    T1 yuuustu: 可以对两边取对数,然后就转化为两个double的比较,时间复杂度$O(n)$ 然后我就用神奇0.4骗分水过 #include<bits/stdc++.h> usin ...

  2. CSP-S模拟测试 88 题解

    T1 queue: 考场写出dp柿子后觉得很斜率优化,然后因为理解错了题觉得斜率优化完全不可做,只打了暴力. 实际上他是可以乱序的,所以直接sort,正确性比较显然,贪心可证,然后就是个sb斜率优化d ...

  3. CSP-S 模拟测试92 题解

    话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...

  4. CSP-S 模拟测试57题解

    人生第一次A,B层一块考rank2,虽然说分差没几分,但还是值得纪念. 题解: T1 天空龙: 大神题,因为我从不写快读也没有写考场注释的习惯,所以不会做,全hzoi就kx会做,kx真大神级人物. T ...

  5. CSP-S 模拟测试 51 题解

    考试过程: 惯例先看一遍三道题,T1 一开始反应要求割点,但是这是有向图,肯定不能求割点,康了一下数据范围,有40%是树的,还不错,决定待会在打. 看T2 字符串题,完了我字符串最弱了,肯定只能打暴力 ...

  6. CSP-S 模拟测试 45 题解

    由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...

  7. [CSP-S模拟测试97]题解

    A.小盆友的游戏 感觉题解解释的很牵强啊……还是打表找规律比较靠谱 对于每个人,它构造了一个期望函数$f(x)$,设它的跟班个数为$cnt[x]$,那么令$f(x)=2^{cnt[x]}-1$(??鬼 ...

  8. [CSP-S模拟测试96]题解

    以后不能再借没改完题的理由不写题解了…… A.求和 求$\sum \sum i+j-1$ 柿子就不化了吧……这年头pj都不考这么弱智的公式化简了…… 坑点1:模数不定,可能没有2的逆元,那么只要先把乘 ...

  9. [CSP-S模拟测试92]题解

    A.数列 显然每个数的答案是互相独立的,直接扩欧求解.我们需要最小化$ax+by=gcd(a,b)$中的$|x|+|y|$,而显然当x或y靠近0时答案可能最优,列个不等式求一下即可. 能$O(1)$千 ...

随机推荐

  1. python--面向对象:封装

    广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种只让自己的对象能调用自己类中的方法 狭义上的封装 ——> 面向对象的三大特性之一属性 和 方法都藏起来 不让你看见 "&q ...

  2. 二.Python基础语法和数据类型

    Python第二节 基础语法和数据类型 Python编码 python3默认情况下源码文件以UTF-8编码, 字符串均为unicode字符串.同时也可以通过# -*- coding: cp-1252 ...

  3. mysqld_safe A mysqld process already exists

    最近修改mysql密码遇到mysqld_safe A mysqld process already exists问题: 解决步骤: 1:ps aux |grep mysql   查看mysql的进程. ...

  4. 14. static(静态) 关键字

    1.修饰成员变量 1)定义:数据需要被共享给所有对象使用使用static修饰(全局变量) 2)注意: 1.用static中创建的成员变量在内存中只有一份 2.千万不要为了方便访问数据而使用static ...

  5. windows 计算器

    calc sin 弧度与角度

  6. Python 爬取赶集网租房信息

    代码已久,有可能需要调整 #coding:utf-8 from bs4 import BeautifulSoup #有这个bs4不用正则也可以定位要爬取的内容了 from urlparse impor ...

  7. Python 空值和非空值

    1)任何值为0的值都是false,任何非0的值都是true if -0.0: print 'yes' #不打印yes if -0.1: print 'yes' #打印yes 2)任何为空的值都是fla ...

  8. delphi Sqlite

    Delphi中SQLite如何读写二进制字段(Blob类型) 在Delphi中,有大量的组件可以操作SQLite数据库,如UniDAC就是其中一个比较优秀的,当然还有ASQLite3Component ...

  9. NX二次开发-获取WCS标识UF_CSYS_ask_wcs

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  10. NX二次开发-UFUN创建表达式UF_MODL_create_exp无TAG

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建一个新的表达式,无TAG UF_MOD ...