2016年团体程序设计天梯赛-模拟赛

来源:互联网 发布:淘宝食品流通许可证 编辑:程序博客网 时间:2024/06/07 07:24

L1-1. N个数求和

/* ***********************************************Author        :MaltubEmail         :xiang578@foxmail.comBlog          :htttp://www.xiang578.com************************************************ */#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>//#include <bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<n;i++)#define per(i,a,n) for(int i=n-1;i>=a;i--)#define pb push_backusing namespace std;typedef vector<int> VI;typedef long long ll;const ll mod=1000000007;const int N=2048;int main(){    int n;    ll t,ta,a1,tmp;    ll a[120],b[120];    scanf("%d",&n);    for(int i=0;i<n;i++)    {        scanf("%lld/%lld",&a[i],&b[i]);    }    if(n>=1)    {        t=b[0];        for(int i=1;i<n;i++)            t=t*b[i]/__gcd(b[i],t);        ta=0;        for(int i=0;i<n;i++)        {            ta+=t/b[i]*a[i];        }    }    a1=ta/t;    ta=ta%t;    tmp=__gcd(abs(ta),abs(t));    ta/=tmp;    t/=tmp;    if(ta<0&&a1!=0) {ta=-ta;}    if(a1==0&&ta!=0)    {        printf("%lld/%lld\n",ta,t);    }    else if(ta==0)    {        printf("%lld\n",a1);    }    else    {        printf("%lld %lld/%lld\n",a1,ta,t);    }    return 0;}

L2-2. 树的遍历

/* ***********************************************Author        :MaltubEmail         :xiang578@foxmail.comBlog          :htttp://www.xiang578.top************************************************ */#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>//#include <bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<n;i++)#define per(i,a,n) for(int i=n-1;i>=a;i--)#define pb push_backusing namespace std;typedef vector<int> VI;typedef long long ll;const ll mod=1000000007;const int N=2048;struct node {    int n;    int l,r;} p[N];int n,a[50],b[50],tot;vector<int>v;int build(int l,int r,int l2,int r2) {    if(l>r||l2>r2) return -1;    int i,t,now;    now=tot;    tot++;    p[now].n=a[r2];    p[now].l=p[now].r=-1;    if(l==r) return now;    for(i=l; i<=r; i++) {        if(b[i]==a[r2]) break;    }    t=i-l;    p[now].l=build(l,i-1,l2,l2+t-1);    p[now].r=build(i+1,r,l2+t,r2-1);    return now;}int main() {    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);    int n,rt,t;    scanf("%d",&n);    for(int i=0; i<n; i++)        scanf("%d",&a[i]);    for(int i=0; i<n; i++)        scanf("%d",&b[i]);    tot=0;    build(0,n-1,0,n-1);    queue<int>q;    v.clear();    q.push(0);    while(!q.empty()) {        t=q.front();        q.pop();        v.push_back(p[t].n);        if(p[t].l!=-1) q.push(p[t].l);        if(p[t].r!=-1) q.push(p[t].r);    }    for(int i=0; i<v.size(); i++) {        if(i) printf(" ");        printf("%d",v[i]);    }    printf("\n");    return 0;}

 L3-004. 肿瘤诊断

#include<cstdio>#include<cstring>#include<vector>#include<iostream>#include<algorithm>#include<queue>using namespace std;int dx[]= {1,-1,0,0,0,0};int dy[]= {0,0,1,-1,0,0};int dz[]= {0,0,0,0,1,-1};int u[70][1300][130];int a[70][1300][130];struct node {    int x,y,z;} p,w;int m,n,l;int bfs(int x,int y,int z) {    int num=0;    queue<node>q;    p.x=x;    p.y=y;    p.z=z;    q.push(p);    while(!q.empty()) {        w=q.front();        num++;        q.pop();        for(int i=0; i<6; i++) {            p.x=w.x+dx[i];            p.y=w.y+dy[i];            p.z=w.z+dz[i];            if(p.x<0||p.x>=l||p.y<0||p.y>=m||p.z<0||p.z>=n) continue;            if(u[p.x][p.y][p.z]==1||a[p.x][p.y][p.z]==0) continue;            u[p.x][p.y][p.z]=1;            q.push(p);        }    }    return num;}int main() {    int t,ans;    scanf("%d%d%d%d",&m,&n,&l,&t);    for(int i=0; i<l; i++)        for(int j=0; j<m; j++)            for(int k=0; k<n; k++)                scanf("%d",&a[i][j][k]);    memset(u,0,sizeof(u));    ans=0;    for(int i=0; i<l; i++)        for(int j=0; j<m; j++)            for(int k=0; k<n; k++) {                if(u[i][j][k]==0&&a[i][j][k]==1) {                    //printf("%d %d %d\n",i,j,k);                    u[i][j][k]=1;                    int num=bfs(i,j,k);                    if(num>=t)                        ans+=num;                    //printf("  %d\n",num);                }            }    printf("%d\n",ans);    return 0;}
0 0
原创粉丝点击