fjnu第九届“蓝桥杯” 题解

来源:互联网 发布:ubuntu 查看分区格式 编辑:程序博客网 时间:2024/04/26 06:22

题目传送门

A题:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int  co[2][2] = { 1, 0, 0, 1 };int ans = 0;int  n = 17, m = 12;void dfs(int x, int y){if (x == n&&m == y){ans++;return;}for (int i = 0; i < 2; i++){int fx = x + co[i][0];int fy = y + co[i][1];if (y == 2 * x||x > n||y > m) continue;dfs(fx, fy);}}int main(){dfs(1, 1);printf("%d\n",ans);//system("pause");return 0;}

B题:


#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int ans = 0;bool vis[20];int num[20];void dfs(int cnt){if (cnt == 10){int num1, num2, num3;num1 = num2 = num3 = 0;for (int i = 0; i < 4; i++) num1 = num1 * 10 + num[i];if (num1>999){for (int i = 4; i < 7; i++) num2 = num2 * 10 + num[i];if (num2>99){for (int i = 7; i < 10; i++) num3 = num3 * 10 + num[i];if (num3>99 && num1 - num2 == num3) ans++, printf("%d - %d = %d\n", num1, num2, num3);}}}for (int i = 0; i < 10; i++){if (vis[i]) continue;vis[i] = 1;num[cnt] = i;dfs(cnt + 1);vis[i] = 0;}}int main(){dfs(0);printf("%d\n",ans);//system("pause");return 0;}

C题:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int mod = 1e9+7,mx = 2e2+10;int c[mx][mx];void init(){for (int i = 1; i < mx; i++){c[i][0] = c[i][i] = 1;for (int j = 1; j < i; j++)c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;}}int main(){init();printf("%d\n", c[110][50]);//system("pause");return 0;}

D题:
#include<iostream>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int co[2][2]={0,1,1,0};const int mx = 1e5+10;int head[mx],n,m,tot,ans;struct node{    int y;    int nxt;    node(){}    node(int yy,int nx):y(yy),nxt(nx){}}Edge[mx<<2];void AddEdge(int x,int y){    Edge[tot] = node(y,head[x]);    head[x] = tot++;}bool vis[mx];void dfs(int x){    if(vis[x]) return ;    vis[x] = 1;    ans++;    for(int i=head[x];~i;i=Edge[i].nxt){        int son = Edge[i].y;        if(!vis[son]) dfs(son);    }}int main(){    int t,a,b;    scanf("%d",&t);    while(t--){        memset(head,-1,sizeof(head));        ans = tot = 0;        scanf("%d%d",&n,&m);        for(int i=1;i<=m;i++){            scanf("%d%d",&a,&b);            AddEdge(a,b);            AddEdge(b,a);        }        memset(vis,0,sizeof(vis));        dfs(1);        if(ans==n) puts("YES");        else puts("NO");    }    return 0;}

E题:

#include<iostream>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int mx = 1e3+10;int n,out[mx];struct node{    int x,y;    node(){}    node(int xx,int yy):x(xx),y(yy){}    bool operator < (node A)const    {        if(x==A.x) return y < A.y;        return x < A.x;    }}s[mx];int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++) scanf("%d%d",&s[i].x,&s[i].y);    sort(s+1,s+1+n);    int ans = 0;    memset(out,0,sizeof(out));    for(int i=1;i<=n;i++){        int maxx = -20000,pos = -1;        for(int j=i-1;j>0;j--){            if(s[i].y>=s[j].y)            {            if(!out[j]&&s[j].y>maxx){            maxx = s[j].y;            pos = j;}            }        }        if(pos!=-1) out[pos]++;        else ans++;    }    printf("%d\n",ans);    return 0;}




阅读全文
0 0
原创粉丝点击