每天两个爆零小技巧

每天两个爆零小技巧,NOIP爆零,不再是梦!
其实是一堆zz错误罢了

Update 7.25

#define maxn 100039
double g[maxn];
int n;

scanf("%d",&n);
for(int i=1;i<=n;i++)
    scanf("%d",&g[i]);
for(int i=1;i<=n;i++)
	printf("%0.d ",g[i]);
#define maxn 100039
struct JTZ{
    
    
	int a[maxn],m;
}edge[maxn];

Update 7.26

while(!q.empty()){
    
    
		FLY cur=q.top(); q.pop();
		for(int i=head[cur.node];i;i=nex[i])
			if(to[i]==n){
    
    
				if(dist[to[i]]<dist[cur.node]+w[i])
				    ans[1]=dist[n]=dist[cur.node]+w[i],cnt=1;
				else ans[++cnt]=dist[cur.node]+w[i];
				q.push((FLY){
    
    n,dist[cur.node]+w[i]});
				if(cnt>=kk) return;
			}
			else if(dist[to[i]]<dist[cur.node]+w[i]){
    
    
				dist[to[i]]=dist[cur.node]+w[i];
				q.push((FLY){
    
    to[i],g[to[i]]+dist[to[i]]});
			}
	}
if(dist[to[i]]<dist[cur.node]+w[i])

PS:这里求的是 k k k短路

Update 7.28

void find(int ux,int dx,int uy,int dy,int fx,int fy,int num){
    
    
	if(ux==dx) return;
	if(uy==dy) return;
	int mx=(ux+dx)>>1;
	int my=(uy+dy)>>1;
	if(fx<=mx&&fy<=my){
    
    
		a[mx][my+1]=num; a[mx+1][my]=num; a[mx+1][my+1]=num;
		find(ux,mx,uy,my,fx,fy,num+1);
		find(ux,mx,my+1,dy,mx,my+1,num+2);
		find(mx+1,dy,uy,my,mx+1,my,num+3);
		find(mx+1,dx,my+1,dy,mx+1,my+1,num+4); 
		}
	if(fx<=mx&&fy>my){
    
    
		a[mx][my]=num; a[mx+1][my]=num; a[mx+1][my+1]=num;
		find(ux,mx,uy,my,mx,my,num+1);
		find(ux,mx,my+1,dy,fx,fy,num+2);
		find(mx+1,dy,uy,my,mx+1,my,num+3);
		find(mx+1,dx,my+1,dy,mx+1,my+1,num+4); 
		}
	if(fx>mx&&fy<=my){
    
    
		a[mx][my]=num; a[mx][my+1]=num; a[mx+1][my+1]=num;
		find(ux,mx,uy,my,mx,my,num+1);
		find(ux,mx,my+1,dy,mx,my+1,num+2);
		find(mx+1,dy,uy,my,fx,fy,num+3);
		find(mx+1,dx,my+1,dy,mx+1,my+1,num+4); 
		}
	if(fx>mx&&fy>my){
    
    
		a[mx][my]=num; a[mx][my+1]=num; a[mx+1][my]=num;
		find(ux,mx,uy,my,mx,my,num+1);
		find(ux,mx,my+1,dy,mx,my+1,num+2);
		find(mx+1,dy,uy,my,mx+1,my,num+3);
		find(mx+1,dx,my+1,dy,fx,fy,num+4); 
		}
	return;
}

PS:注意num数组的迭代。

a[mx][my+1]=++cnt; a[mx+1][my]=cnt; a[mx+1][my+1]=cnt;

写成

a[mx][my+1]=++cnt; a[mx+1][my]=++cnt; a[mx+1][my+1]=++cnt;

Update 7.31

typedef long long ll;
int f[39];
void init(){
    
    
	f[0]=1;
	for(int i=1;i<=35;i++)
		f[i]=f[i-1]<<1;
}
ll f[39];
#define pow2(x) f[x]
int cnt=pow2(n-1)*pow2(n-1);
十年OI一场空,不开longlong见祖宗

Update 8.3

NODE x=find(n-1,(ll)num%(ll)cnt);

PS:你有考虑过整除的时候吗?

Update 8.7

struct JTZ{
    
    
	int x,y;
	bool operator < (const JTZ x) const{
    
    
		if(this->x == x.x) return this->y<=x.y;
		return this->x < x.x;
	}
}tmp;
map<JTZ,bool> f;

多了一个=…

for(int i=1;i=n;i++)

Update:8.13

for(int i=1;i<=n;i++)
    for(int i=1;i<=n;i++)
inline int read(){
    
    
	char c=getchar();
	int sum=0;
	while((c>'9'||c<'0')&&c!='-') c=getchar();
	while('0'<=c&&c<='9'){
    
    
		sum=(sum<<1)+(sum<<3)+(c^48);
		c=getchar();
	}
	return sum;
}

PS:输入负数怎么办?

Update:8.14

printf("%lld",&a[h+1][0]);

Update:8.17

    int maxx=-1;
	for(int i=0;i<=m;i++)
	    maxx=max(f[n][i][i+1][1],f[n][i][i+1][0]);
	

Update:8.21

for(i=0;i<=m;i++){
    
    
	    ans=min(ans,f[n][i][1]);
	    ans=min(ans,f[n][1][0]);
	}

Update:9.11

for(int i=1;i<=n;i++){
    
    
		if(a[i]*(sum[l[i]+1 -1]-sum[r[i]-1]) > maxx)
		    maxx=a[i]*(sum[l[i]+1 -1]-sum[r[i]-1]);
	}

前缀和小减大…

Update:11.2

很久没有更了…

	for(int i=1;i<=n;i++)
	    for(int j=i+1;i<=n;i++)

经 典 错 误

本文不定期更新……

猜你喜欢

转载自blog.csdn.net/jiangtaizhe/article/details/107577675