zoukankan      html  css  js  c++  java
  • 2018年东北农业大学春季校赛----不完整题解

    题目出的还是可以,题面读的懂,题意比较清楚,练一下板子题比较舒服

    就是自己太菜了QAQorz

    /**B**/

    给你一个n*n矩阵,按照顺序填入1到n*n的数,例如n=5,该矩阵如下

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    现在让你连接相邻两条边的中点,然后只保留他们围成封闭图形区域的数字,那么这个矩阵变为

    3

    7

    8

    9

    11

    12

    13

    14

    15

    17

    18

    19

    23

    现在你们涵哥让你求变化后的矩阵的所有元素的和为多少

    矩阵求和,直接推公式,一个小技巧就是直接用一个数字代表值,而不用开二维数组来存这个矩阵

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<string.h>
    using namespace std;
    int main() {
        int N;
        int T;
        scanf("%d",&T);
        while(T--){
            scanf("%d",&N);
            int m=N/2;
            long long sum=0;
            int k=1;
            int t=1;
                for(int i=0;i<N;i++){
                    for(int j=0;j<N;j++){
                    int x=i;
                    int y=j;
                    int p1=-1*i+m;
                    int p2=i-m;
                    int p3=i+m;
                    int p4=-1*i+3*m;
                    if(y>=p1&&y>=p2&&y<=p3&&y<=p4){
                        sum+=t;
                    }
                        t++;
                }
          }
            printf("%lld
    ",sum);
        }
        return 0;
    }
    View Code

    /***D***/

    给你一个n*m的迷宫,这个迷宫中有以下几个标识:

    s代表起点

    t代表终点

    x代表障碍物

    .代表空地

    现在你们涵哥想知道能不能从起点走到终点不碰到障碍物(只能上下左右进行移动,并且不能移动到已经移动过的点)。

    直接bfs搜一遍就行,裸题

    #include<bits/stdc++.h>
    using namespace std;
    #define MAX_N 1005
    #define MAX_M 1005
    const int INF=1000000;
    int N,M;
    int sx,sy;
    int gx,gy;
    int d[MAX_N][MAX_M];
    typedef pair<int,int> P;
    char maze[MAX_N][MAX_M];
    int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
    int bfs()
    {
        queue<P>que;
        for(int i=0;i<N;i++)
            for(int j=0;j<M;j++) d[i][j]=INF;
        que.push(P(sx,sy));
        d[sx][sy]=0;
        while(que.size()){
            P p=que.front();que.pop();
            if(p.first==gx&&p.second==gy) break;
            for(int i=0;i<4;i++){
                int nx=p.first+dx[i],ny=p.second+dy[i];
                if(0<=nx&&nx<N&&0<=ny&&ny<=M&&maze[nx][ny]!='x'&&d[nx][ny]==INF){
                   que.push(P(nx,ny));
                   d[nx][ny]=d[p.first][p.second]+1;
                   }
            }
     
        }
        return d[gx][gy];
    }
     
    void solve()
    {
        int res=bfs();
        if(res!=INF){
            printf("YES
    ");
        }else{
            printf("NO
    ");
        }
    }
    int main()
    {
            int t;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&N,&M);
            int i,j;
            for(i=0;i<N;i++){
               scanf("%s",maze[i]);
            }
            for(i=0;i<N;i++){
                for(j=0;j<M;j++){
                    if(maze[i][j]=='s'){sx=i;sy=j;}
                    if(maze[i][j]=='t'){gx=i;gy=j;}
                }
            }
     
            solve();
        }
        return 0;
    }
    View Code

    /***I***/

    wyh学长现在手里有n个物品,这n个物品的重量和价值都告诉你,然后现在让你从中选取k个,问你在所有可能选取的方案中,最大的单位价值为多少(单位价值为选取的k个物品的总价值和总重量的比值)

    最大化最小值

    挑战143面原题

    #include<bits/stdc++.h>
    typedef long long ll;
    using namespace std;
    int n, t, k, w[100010], v[100010];
    double y[100010];
    int C(double x)
    {
        for(int i = 0; i < n; i++){
            y[i] = v[i]-x*w[i];
        }
        sort(y, y+n);
        double sum = 0;
        for(int i = 0; i < k; i++){
            sum += y[n-i-1];
        }
        return sum >= 0;//转成与0比较
    }
    int main()
    {
        cin >> t;
        while(t--){
            cin >> n >> k;
            for(int i = 0; i < n; i++){
                cin >> w[i] >> v[i];
            }
            double lb = 0, ub = 1000;
            for(int i = 0; i < 100; i++){
                double mid = (lb+ub)/2;
                if(C(mid)){
                    lb = mid;
                }
                else{
                    ub = mid;
                }
    //            printf("%g %g %g
    ",lb,ub,mid);
                //cout << mid << endl;
            }
            printf("%.2lf
    ", lb);
        }
        return 0;
    }
    View Code

    /**L**/

    你们wyh学长小时候住在河边,因为周围的生态环境非常好,所以经常会有天鹅浮在湖面上,每只天鹅都长得不一样,它们偶尔排成一排,偶尔分散开,偶尔也会去其他河畔,wyh学长为了统计它们的个数,编了一个程序赋予它们一个“萌”值,但是这些天鹅很不听话,一会儿会从别的地方游过来一两只,一会儿又会在统计过程中游走一两只,现在请你帮他完成统计任务。

    线段树板子题0.0

    #include <bits/stdc++.h>
    using namespace std;
      
    const int maxn = 1e6+10;
    int T;
      
    int s[maxn * 4];
      
    char op[20];
    int n, m;
    int ans;
      
    void build(int l, int r, int rt) {
      s[rt] = 0;
      if(l == r) return;
      int mid = (l+r)/2;
      build(l, mid, 2*rt);
      build(mid+1, r, 2*rt+1);
    }
      
    void update(int pos, int val, int l, int r, int rt) {
      if(l == r) {
        s[rt] += val;
        return;
      }
      int mid = (l+r)/2;
      if(pos <= mid) update(pos, val, l, mid, 2 * rt);
      else update(pos, val, mid+1, r, 2*rt+1);
      s[rt] = s[2*rt]+s[2*rt+1];
    }
      
    void query(int k, int l, int r, int rt) {
      if(l == r) {
        ans = l;
        return;
      }
      int mid = (l+r)/2;
      if(s[2*rt+1] >= k) query(k,mid+1,r,2*rt+1);
      else query(k - s[2*rt+1],l,mid,2*rt);
    }
      
    int main() {
      scanf("%d",&T);
      while(T--) {
        scanf("%d%d",&n,&m);
        build(0,1e6,1);
        for(int i = 1; i <= n; i ++) {
          int x;
          scanf("%d",&x);
          update(x,1,0,1e6,1);
        }
          
        while(m--) {
          scanf("%s", op);
          int x;
          scanf("%d", &x);
          if(op[0] == 'q') {
            query(x,0,1e6,1);
            printf("%d
    ", ans);
          } else if(op[0] == 'i') {
            update(x, 1, 0, 1e6, 1);
          } else {
            update(x, -1, 0, 1e6, 1);
          }
        }
          
      }
      return 0;
    }
    View Code
    每一个不曾刷题的日子 都是对生命的辜负 从弱小到强大,需要一段时间的沉淀,就是现在了 ~buerdepepeqi
  • 相关阅读:
    cube.js 基于http 通道的数据实时更新bug 解决
    cube.js 基于http 通道的数据实时更新
    cube.js websocket 实时数据更新说明
    phpspy 进行php 项目性能分析
    使用groovy 下载maven依赖包
    java 几个不错的代码生成工具
    语言性能分析工具总结
    使用rbspy 分析ruby应该性能
    dremio v18.0 软件包可以使用了
    nginx rewrite查询字符串重写问题
  • 原文地址:https://www.cnblogs.com/buerdepepeqi/p/8728072.html
Copyright © 2011-2022 走看看