清北学堂 金秋杯联赛模拟赛第二轮day1

来源:互联网 发布:淘宝宝贝上架编辑技巧 编辑:程序博客网 时间:2024/06/07 05:05

T1

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define MAXN 1005int n,m,x,y,z,a[MAXN][MAXN],tot;int ny,nx;bool flag=0;int main(){    freopen("calc.in","r",stdin);    freopen("calc.out","w",stdin);    scanf("%d%d%d%d%d",&m,&n,&ny,&nx,&z);    tot=a[0][0]=1;    while(tot<m*n){        while(y+1<m&&!a[x][y+1]){            a[x][++y]=++tot;            if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }        }        if(flag) break;        while(x+1<n&&!a[x+1][y]){            a[++x][y]=++tot;            if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }        }        if(flag) break;        while(y-1>=0&&!a[x][y-1]){            a[x][--y]=++tot;            if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }        }        if(flag) break;        while(x-1>=0&&!a[x-1][y]){            a[--x][y]=++tot;            if(a[x][y]==a[nx][ny]+z&&a[nx][ny]){ flag=1; break; }        }        if(flag) break;    }    printf("%d %d\n",y,x);    fclose(stdin);fclose(stdout);    return 0;}

T1,因为calc.out哪里写成了stdin完美爆零,本来预计160的成绩就只有90分了。。。

T2

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define MAXN 100005inline void read(int &x){    x=0; int f=1; char c=getchar();    while(c>'9'||c<'0'){ if(c=='-')f=-1; c=getchar(); }    while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } x*=f;}int Max,Min,a[MAXN];long long ans[MAXN];int main(){    freopen("sum.in","r",stdin);    freopen("sum.out","w",stdout);    int T,n;    read(T);    while(T--){        memset(ans,0,sizeof ans );        read(n);        for(int i=1;i<=n;++i) read(a[i]);        for(int i=1;i<=n;++i){            Max=a[i],Min=a[i];            for(int j=i;j<=n;++j){                Max=max(Max,a[j]);                Min=min(Min,a[j]);                ++ans[Max-Min];            }        }        for(register int i=0;i<=n-1;++i)            printf("%lld\n",ans[i]),ans[i+1]+=ans[i];    }    fclose(stdin);fclose(stdout);    return 0;}

T3

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>using namespace std;int front[1000010],to[1000010],nextt[1000010];bool vis[1000010];bool ed[1000010];int tot,n,m,k,res;vector<int>ans;void add(int u,int v) {    to[++tot]=v;    nextt[tot]=front[u];    front[u]=tot;}void dfs(int now) {    if(now>ans.size()) {        res++;        return;    }    int u=ans[now-1];    for(int i=front[u]; i; i=nextt[i]) {        if(!vis[to[i]]) {            vis[to[i]]=1;            dfs(now+1);            vis[to[i]]=0;        }    }    return;}int main() {    freopen("count.in","r",stdin);    freopen("count.out","w",stdout);    int t;    scanf("%d",&t);    while(t--) {        bool flag=false;        res=0;        ans.clear();        memset(front,0,sizeof(front));        memset(vis,0,sizeof(vis));        memset(ed,0,sizeof(ed));        scanf("%d%d%d",&n,&m,&k);        for(int i=1; i<=m; i++) {            int x,y;            scanf("%d%d",&x,&y);            if(abs(y-x)>k) {                flag=true;                break;            }            add(x,n+y);            ed[x]=1;            vis[n+y]=1;        }        if(flag) {            printf("0\n");            continue;        }        for(int i=1; i<=n; i++)            if(!ed[i]) ans.push_back(i);        for(int i=0; i<ans.size(); i++) {            int mn=max(1,ans[i]-k);            int mx=min(n,ans[i]+k);            for(int j=mn; j<=mx; j++)                add(ans[i],n+j);        }        dfs(1);        printf("%d\n",res);    }    fclose(stdin);fclose(stdout);    return 0;}
阅读全文
0 0
原创粉丝点击