标签: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的一次,然后机会就,,,
标签:tps class 问题 www. open 换行 bsp noi www
原文地址:http://www.cnblogs.com/wondove/p/7719880.html