码农也是农...头像
第16届省赛蓝桥杯大赛C/C++大学B组封面图

第16届省赛蓝桥杯大赛C/C++大学B组

目录

一.移动距离

1.题目讲解

2.代码实现

二.客流量上限

1.题目讲解

2.代码实现

三.可分解的正整数

1.题目讲解

2.代码实现

四.产值调整

1.题目讲解

2.代码实现

五.画展布置

1.题目讲解

2.代码实现

六.水质检测

1.题目讲解

2.代码实现

七.生产车间

1.题目讲解

2.代码实现

八.装修报价

1.题目讲解

2.代码实现


一.移动距离

题目链接:https://www.lanqiao.cn/problems/20558/learning/

1.题目讲解

我要进行计算角度,角度就是tanθ = 666 / 233 => θ = arctan 666 / 233

2.代码实现

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double x = 233,y = 666;
    printf("%.0lf",sqrt(x * x + y * y) * (1 + atan(y / x)));
    return 0;
}

二.客流量上限

题目链接:https://www.lanqiao.cn/problems/20550/learning/

1.题目讲解

2.代码实现

#include <iostream>

using namespace std;

typedef long long LL;
const int MOD = 1e9 + 7;

int main()
{
    LL ret = 1;
    for(int i = 1;i <= 1012;i++)
    {
        ret = ret * 2 % MOD;
    }
    cout << ret << endl;
    return 0;
}

三.可分解的正整数

题目链接:https://www.lanqiao.cn/problems/20545/learning/

1.题目讲解

除了1不可以,其他的都可以写成负数 0 正数的形式

2.代码实现

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int cnt = 0;
    while(n--)
    {
        int x;
        cin >> x;
        if(x != 1)
        {
            cnt++;
        }
    }
    cout << cnt << endl;
    return 0;
}

四.产值调整

题目链接:https://www.lanqiao.cn/problems/20538/learning/

1.题目讲解

2.代码实现

#include <iostream>

using namespace std;

int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        int a,b,c,k;
        cin >> a >> b >> c >> k;
        while(k--)
        {
            int x = (b + c) / 2,y = (a + c) / 2,z = (a + b) / 2;
            a = x;
            b = y;
            c = z;
            if(a == b && b == c)
            {
                break;
            }
        }
        cout << a << " " << b << " " << c << endl;
    }
    return 0;
}

五.画展布置

题目链接:https://www.lanqiao.cn/problems/20532/learning/

1.题目讲解

2.代码实现

#include <iostream>
#include <algorithm>

using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL n,m,a[N];

int main()
{
    cin >> n >> m;
    for(int i = 1;i <= n;i++)
    {
        cin >> a[i];
    }
    sort(a + 1,a + n + 1);
    LL ret = 1e10;
    for(int i = 1;i + m - 1 <= n;i++)
    {
        ret = min(ret,a[i + m - 1] * a[i + m - 1] - a[i] * a[i]);
    }
    cout << ret << endl;
    return 0;
}

六.水质检测

题目链接:https://www.lanqiao.cn/problems/20525/learning/

1.题目讲解

01bfs算法

2.代码实现

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

const int N = 1e6 + 10;
int n;
char g[2][N];
int dist[2][N];
bool st[2][N];
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};


int bfs(int i,int j)
{
    int ret = 0;
    memset(dist,0x3f,sizeof dist);
    deque<pair<int,int>> q;
    q.push_back({i,j});
    dist[i][j] = 0;
    while(q.size())
    {
        auto t = q.front();
        q.pop_front();
        int x = t.first,y = t.second;
        if(st[x][y])
        {
            continue;
        }
        st[x][y] = true;
        if(g[x][y] == '#')
        {
            ret = max(ret,dist[x][y]);
        }
        for(int i = 0;i < 4;i++)
        {
            int nx = x + dir[i][0],ny = y + dir[i][1];
            if(nx < 0 || nx >= 2 || ny < 0 || ny >= n || st[nx][ny])
            {
                continue;
            }
            int w = g[nx][ny] == '#' ? 0 : 1;
            dist[nx][ny] = min(dist[nx][ny],dist[x][y] + w);
            if(w)
            {
                q.push_back({nx,ny});
            }
            else
            {
                q.push_front({nx,ny});
            }
        }
    }
    return ret;
}

int main()
{
    cin >> g[0] >> g[1];
    n = strlen(g[0]);
    for(int j = 0;j < n;j++)
    {
        if(g[0][j] == '#')
        {
            cout << bfs(0,j) << endl;
            return 0;
        }
        if(g[1][j] == '#')
        {
            cout << bfs(1,j) << endl;
            return 0;
        }
    }
    cout << 0 << endl;
    return 0;
}

七.生产车间

题目链接:https://www.lanqiao.cn/problems/20516/learning/

1.题目讲解

2.代码实现

#include <iostream>
#include <vector>

using namespace std;

const int N = 1010;
int n,w[N];
vector<int> edges[N];
int f[N][N];

void dfs(int x,int fa)
{
    f[x][0] = true;
    if(edges[x].size() == 1 && x != 1)
    {
        f[x][w[x]] = true;
        return;
    }
    for(auto y : edges[x])
    {
        if(y == fa)
        {
            continue;
        }
        dfs(y,x);
        for(int j = w[x];j >= 0;j--)
        {
            for(int k = min(w[y],j);k >= 0;k--)
            {
                f[x][j] = f[x][j] || (f[y][k] && f[x][j - k]);
            }
        }
    }
}

int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> w[i];
    }
    for(int i = 1;i < n;i++)
    {
        int a,b;
        cin >> a >> b;
        edges[a].push_back(b);
        edges[b].push_back(a);
    }
    dfs(1,0);
    for(int i = w[1];i >= 0;i--)
    {
        if(f[1][i])
        {
            cout << i << endl;
            break;
        }
    }
    return 0;
}

#include <iostream>
#include <bitset>

using namespace std;

int main()
{
    bitset<100> a, b; // 申请一个长度为 100 的 01 串
    a |= (1 << 10);   // 把第 10 位置成 1
    b |= a;           // b = b | a

    cout << a[10] << endl;
    cout << b[10] << endl;

    a <<= 1;          // 将 a 整体左移一位
    cout << a[10] << endl;
    cout << a[11] << endl;

    return 0;
}

#include <iostream>
#include <vector>
#include <bitset>
using namespace std;

const int N = 1010;
int n,w[N];
vector<int> edges[N];
//bool f[N][N];
bitset<N> f[N];

void dfs(int x,int fa)
{
    f[x][0] = true;
    if(edges[x].size() == 1 && x != 1)
    {
        f[x][w[x]] = true;
        return;
    }
    for(auto y : edges[x])
    {
        if(y == fa)
        {
            continue;
        }
        dfs(y,x);
        bitset<N> tmp = f[x];
        for(int k = w[y];k >= 0;k--)
        {
            if(f[y][k])
            {
                f[x] |= tmp << k;
            }
        }
    }
}

int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> w[i];
    }
    for(int i = 1;i < n;i++)
    {
        int a,b;
        cin >> a >> b;
        edges[a].push_back(b);
        edges[b].push_back(a);
    }
    dfs(1,0);
    for(int i = w[1];i >= 0;i--)
    {
        if(f[1][i])
        {
            cout << i << endl;
            break;
        }
    }
    return 0;
}

八.装修报价

题目链接:https://www.lanqiao.cn/problems/20510/learning/

1.题目讲解

2.代码实现

#include <iostream>

using namespace std;

typedef long long LL;
const int N = 1e5 + 10,MOD = 1e9 + 7;
LL n,a[N];
LL mi[N];

int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
    {
        cin >> a[i];
    }
    mi[0] = 1;
    for(int i = 1;i <= n;i++)
    {
        mi[i] = mi[i - 1] * 3 % MOD;
    }
    LL ret = 0,s = 0;
    for(int i = 1;i < n;i++)
    {
        s ^= a[i];
        ret = (ret + s * 2 % MOD * mi[n - i - 1] % MOD) % MOD;
    }
    s ^= a[n];
    ret = (ret + s) % MOD;
    cout << ret << endl;
    return 0;
}

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_60668256/article/details/159913682

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--