码迷,mamicode.com
首页 > 其他好文 > 详细

NOIp2017冲刺倒计时19天 noip2014D2

时间:2017-10-24 01:40:08      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:tps   class   问题   www.   open   换行   bsp   noi   www   

上午考了2014Day2,题目都比较水,而我考的很渣渣

T1 https://www.luogu.org/problem/show?pid=2038

暴力枚就好,稍微加个前缀和优化(不加也可以过,不过不是很稳,我就加了一维(因为懒))

然而输出的时候GG,本该输出空格的,我竟傻到输出换行,,,

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 210
int mp[maxn][maxn],S[maxn][maxn],bns[maxn][maxn];
int main(){
	freopen("wireless.in","r",stdin);
	freopen("wireless.out","w",stdout);
	int d,n;
	scanf("%d%d",&d,&n);
	for(int i=1;i<=n;++i){
		int x,y,k;
		scanf("%d%d%d",&x,&y,&k);
		mp[++x][++y]=k;
	}
	for(int i=1;i<=129;++i){
		for(int j=1;j<=129;++j){
			S[i][j]=S[i][j-1]+mp[i][j];
		}
	}
	int maxx=0;
	for(int i=1;i<=129;++i){
		for(int j=1;j<=129;++j){
			int tmp=0;
			for(int kk=max(1,i-d);kk<=min(129,i+d);++kk){
				tmp+=S[kk][min(129,j+d)]-S[kk][max(1,j-d)-1];
			}
			maxx=max(maxx,tmp);
			bns[i][j]=tmp;
		}
	}
	int ans=0;
	for(int i=1;i<=129;++i){
		for(int j=1;j<=129;++j){
			if(bns[i][j]==maxx){
				++ans;
			}
		}
	}
	printf("%d %d",ans,maxx);
	return 0;
}

 最后PE,,, 0分

T2

https://www.luogu.org/problem/show?pid=2296

又是一道水题,然而我又没拿满,,,

直接建反边,跑两边bfs

第一遍记录没有联通的点

然后删掉这些点和建完反边后通向的点

第二遍bfs其实就是spfa

问题出在删点,

我的错误代码:

	for(int i=1;i<=n;++i){
		if(!vis[i]){
			for(int j=head[i];j;j=E[j].next){
				vis[E[j].v]=0;
			}
		}
	}

 

真的是傻,,,vis会影响下一步决策呐~

幸亏数据水到让我过2个点

#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxm 2000010
#define maxn 100010
int head[maxn],ecnt=0;
int dis[maxn];
int vis1[maxn],vis2[maxn],vis[maxn];
int F[maxm],T[maxm];
struct Edge{
	int u,v,next;
}E[maxm];
void addedge(int u,int v){
	E[++ecnt].u=u;
	E[ecnt].v=v;
	E[ecnt].next=head[u];
	head[u]=ecnt;
}
void bfs(int dove){
	queue<int> q;
	q.push(dove);
	vis[dove]=1;
	while(!q.empty()){
		int xx=q.front();
		q.pop();
		for(int i=head[xx];i;i=E[i].next){
			int v=E[i].v;
			if(!vis[v]){
				vis[v]=1;
				q.push(E[i].v);
			}
		}
	}
}
void spfa(int dove,int jug){
	queue<int> q;
	q.push(dove);
	vis2[dove]=1;
	while(!q.empty()){
		int xx=q.front();
		q.pop();
		for(int i=head[xx];i;i=E[i].next){
			int v=E[i].v;
			if(vis1[v]||vis2[v]) continue;
			vis2[v]=1;
			dis[v]=dis[xx]+1;
			q.push(v);
		}
	}
}
int main(){
	int n,m,s,t;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i) scanf("%d%d",&F[i],&T[i]);
	for(int i=1;i<=m;++i) addedge(T[i],F[i]);
	scanf("%d%d",&s,&t);
	bfs(t);
	for(int i=1;i<=n;++i)
		if(!vis[i]){
			vis1[i]=1; 
			for(int j=head[i];j;j=E[j].next) vis1[E[j].v]=1;
		}
	spfa(t,s);
	if(dis[s]>n)dis[s]=-1;
	printf("%d",dis[s]);
	return 0;
}

  然后re掉一个点,把数组扩大10倍就a了

T3 https://www.luogu.org/problem/show?pid=2312

本来之前做过的,然后就凭着印象写,然后写炸,骗了50分

所以最后总共70

这是题目最水到我能AK的一次,然后机会就,,,

 

NOIp2017冲刺倒计时19天 noip2014D2

标签:tps   class   问题   www.   open   换行   bsp   noi   www   

原文地址:http://www.cnblogs.com/wondove/p/7719880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!