第五届上海市青少年算法竞赛 题解

上海市青少年算法月赛丙组—目录汇总 上海市青少年算法月赛—目录汇总 阅读详情

第五届上海市青少年算法竞赛 题解
本次比赛涉及算法:字符串、贪心、枚举模拟、 m a p map map、数学、思维、栈、折半查找、广度优先搜索
今年比赛整体的题目难度和思维难度还是偏大的,对小朋友们的逻辑思维、分析能力和运用能力有一定要求,特别是最后一题要拿满分,对于细节的处理要考虑周全, 2 2 2小时的比赛时间确实有点太短了。

比赛时间:2024 年 4 月 6 日
比赛链接:https://iai.sh.cn/contest/63

第一题:T1符号译码

标签:字符串、枚举模拟、 m a p map map
题意:给定 01 01 01串和字符之间的编码规则,给出一个 01 01 01字符串,要求输出对应的符号序列。
(字符串长度为 n n n, 2 ≤ n ≤ 300000 2≤n≤300000 2≤n≤300000)
题解:按照题意直接暴力模拟就好了,可以用 m a p map map优化下代码逻辑。下面给出两种的写法的代码。
代码:
普通暴力版:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    cin >> s;
    int n = s.size();
    for (int i = 0; i < n; i++) {
        if (s[i] == '0' && s[i+1] == '1' && s[i+2] == '0') {
            cout << '[';
            i += 2;
        }
        else if (s[i] == '1' && s[i+1] == '0' && s[i+2] == '1') {
            cout << ']';
            i += 2;
        }
        else if (s[i] == '0' && s[i+1] == '0') {
            cout << '<';
            i += 1;
        }
        else if (s[i] == '1' && s[i+1] == '1') {
            cout << '>';
            i += 1;
        }
        else if (s[i] == '0' && s[i+1] == '1' && s[i+2] == '1') {
            cout << '+';
            i += 2;
        }
        else if (s[i] == '1' && s[i+1] == '0' && s[i+2] == '0') {
            cout << '-';
            i += 2;
        }
    }
    return 0;
}

简洁版、 m a p map map优化版:

#include <bits/stdc++.h>
using namespace std;

map<string, char> m;

int main() {
    // map预记录
    m["010"] = '['; m["101"] = ']';
    m["00"] = '<'; m["11"] = '>';
    m["011"] = '+'; m["100"] = '-';
    string s;
    cin >> s;
    int n = s.size();
    for (int i = 0; i < n; i++) {
        if (m[s.substr(i, 3)]) {
            cout << m[s.substr(i, 3)];
            i += 2;
        }
        else if (m[s.substr(i, 2)]) {
            cout << m[s.substr(i, 2)];
            i += 1;
        }
    }
    return 0;
}

第二题:T2数对排序

标签:数学、思维
题意:由两个自然数组成的一对数称之为有序数对,有序是指数对的第一项与第二项是区别的,例如 ( 0 , 1 ) (0,1) (0,1), ( 1 , 0 ) (1,0) (1,0)是不一样的数对。对所有有序数对进行排序,先按照每对中两数之和从小到大排序,两数之和相同,再按照每个数对中第一个数从小到大排序。
例如前 6 6 6个数对为 ( 0 , 0 ) , ( 0 , 1 ) , ( 1 , 0 ) , ( 0 , 2 ) , ( 1 , 1 ) , ( 2 , 0 ) (0,0), (0,1), (1,0), (0,2), (1,1), (2,0) (0,0),(0,1),(1,0),(0,2),(1,1),(2,0)
给定一个整数 k k k,求出第 k k k个数对。 ( 1 ≤ k ≤ 1 , 000 , 000 , 000 ) (1≤k≤1,000,000,000) (1≤k≤1,000,000,000)
题解:我们列一下前几个,找下规律:
( 0 , 0 ) (0,0) (0,0)、 ( 0 , 1 ) , ( 1 , 0 ) (0,1), (1,0) (0,1),(1,0)、 ( 0 , 2 ) , ( 1 , 1 ) , ( 2 , 0 ) (0,2), (1,1), (2,0) (0,2),(1,1),(2,0)、 ( 0 , 3 ) , ( 1 , 2 ) , ( 2 , 1 ) , ( 3 , 0 ) (0,3), (1,2), (2,1),(3,0) (0,3),(1,2),(2,1),(3,0)、 ( 0 , 4 ) , ( 1 , 3 ) , ( 2 , 2 ) , ( 3 , 1 ) , ( 4 , 0 ) (0,4), (1,3), (2,2),(3,1),(4,0) (0,4),(1,3),(2,2),(3,1),(4,0)
能够发现数对之和为 0 0 0的有 1 1 1个;数对之和为 1 1 1的有 2 2 2个;数对之和为 2 2 2的有 3 3 3个;数对之和为 3 3 3的有 4 4 4个…
我们可以用 ( 1 + n ) ∗ n 2 \frac {(1+n)*n}{2} 2(1+n)∗n​公式,确定要找的第 k k k个数对两项之和为多少,因为第 1 1 1个数对是从 ( 0 , 0 ) (0,0) (0,0)开始的,所以找到的时候要 n − 1 n-1 n−1,最后输出的时候,要注意对于每个之和为 n n n的第一项数也是从 0 0 0开始的,所以 k k k也需要减 1 1 1。
代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int k, n = 0;
    cin >> k;
    while ((1 + n) * n / 2 < k) n++;
    n--;
    k -= (1 + n) * n / 2;
    k--;
    cout << k << " " << n - k << endl;
    return 0;
}

第三题:T3最大的数字

标签:字符串、栈、贪心
题意:给定一个十进制整数 n n n ,保证 n n n 的首位不为 0 0 0,你必须删除其中 d d d 个数字,使得留下的数字最大。请输出留下的最大数。
( 1 ≤ n < 1 0 300000 1≤n<10^{300000} 1≤n<10300000, 1≤ d <n)

题解:要使得最后留下的数最大,想着把前面稍微比较小的数删掉,后面大一点的数字顶上来。
比如 417 417 417,如果要删除一个数,我们会把 1 1 1删除,然后 7 7 7顶上来,形成 47 47 47。
如何实现这样的逻辑呢?我们考虑维护一个栈,由于栈后进先出的性质,我们遍历到每一位的时候可以去检测一下和栈顶元素的大小关系,如果目前还能删数,并且当前元素比栈顶元素(前面的数)大,那我们可以把栈顶元素弹掉,等价于删除栈顶元素。那么最后留下来的就能保证比较大。
可能整个过程中删除数不够,其实已经维护了一个递减序列(非严格),那我们把末尾的一些删掉即可。
比如原数为 86421 86421 86421, d = 2 d=2 d=2,那么遍历的过程中不会因为栈顶和当前数的关系删除的情况。
最终我们把最后两个元素删掉,形成 864 864 864就好了。
代码:

#include <bits/stdc++.h>
using namespace std;

int d;
string str, ans = "";
stack<char> s;

int main() {
    cin >> d >> str;
    int len = str.size();
    for (int i = 0; i < len; i++) {
        // 当d>0的时候,如果栈顶比当前字符小 弹出
        while (d > 0 && !s.empty() && s.top() < str[i]) {
            s.pop();
            d--;
        }
        s.push(str[i]);
    }
    while (!s.empty()) {
        if (d > 0) d--;
        else ans = s.top() + ans;
        s.pop();
    }
    cout << ans << endl;
    return 0;
}

第四题:T4夹心饼干

标签:思维、数学
题意:给定一个数列 a 1 , a 2 , a 3 . . . , a n a_1,a_2,a_3...,a_n a1​,a2​,a3​...,an​,请求出在这个序列中,能挑出多少个三个数 a i , a j , a k a_i,a_j,a_k ai​,aj​,ak​,满足 i < j < k i<j<k i<j<k且 a i = a k a_i=a_k ai​=ak​且 a i ≠ a j a_i \neq a_j ai​=aj​。 ( 1 ≤ n ≤ 300 , 000 , 0 ≤ a i < n ) (1≤n≤300,000,0≤a_i<n) (1≤n≤300,000,0≤ai​<n)
题解:观察题目中给的样例: 1   2   1   2   1 1\ 2\ 1\ 2\ 1 1 2 1 2 1,第 1 1 1个位置的 1 1 1和第 3 3 3个位置的 1 1 1中间夹了一个 2 2 2;
第 1 1 1个位置的 1 1 1和第 5 5 5个位置的 1 1 1之间夹了两个 2 2 2;第 2 2 2个位置的 2 2 2和第 4 4 4个位置的 2 2 2之间夹了 1 1 1个 1 1 1;第 3 3 3个位置的 1 1 1和第 5 5 5个位置的 1 1 1中间夹了一个 2 2 2。
可以把所有相同的数的下标按顺序放到对应的 v e c t o r vector vector里面。
那么任意一对相同的数之间能够夹的数的个数就等于,两个数的下标之差 - 两个数中间包含的相同数个数。
比如 1 1 1维护的 v e c t o r vector vector: 1   3   5 1\ 3 \ 5 1 3 5。
原序列的下标 1 1 1和下标 5 5 5之间能夹的数的个数就等于 5 − 1 − ( 3 − 1 ) = 2 5-1-(3-1)=2 5−1−(3−1)=2。
注意题目中的细节, a i a_i ai​可能等于 0 0 0。
代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll N = 3e5 + 10;
ll n, x, mx = 0, ans = 0;
vector<ll> a[N];

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x;
        mx = max(mx, x);
        a[x].push_back(i);
    }
    for (int k = 0; k <= mx; k++) {
        for (int i = 0; i < a[k].size(); i++) {
            for (int j = i + 1; j < a[k].size(); j++) {
                // 两个相同的数下标距离差-两个中间包含的相同数个数
                ans += (a[k][j] - a[k][i] - (j - i));
            }
        }
    }
    cout << ans << endl;
    return 0;
}

第五题:T5最大的余数

标签:折半查找
题意:给定 n n n个数字 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1​,a2​,…,an​,在给定一个整数 m m m,请从给定的数字中挑选任意多个数字,使得它们的和模 m m m的余数尽量大,输出这个最大的余数。 ( 1 ≤ n ≤ 40 , 1 ≤ a i ≤ 1 0 9 , 1 ≤ m ≤ 1 0 9 ) (1≤n≤40,1≤a_i≤10^9,1≤m≤10^9) (1≤n≤40,1≤ai​≤109,1≤m≤109)
题解:一看到 n ≤ 40 n≤40 n≤40,下意识就是折半查找,因为暴力搜索 2 40 ≈ 1 0 12 2^{40}≈10^{12} 240≈1012,肯定会超时。把问题折半一下,分别预处理出各自一半的数的组成情况,时间复杂度是 2 ∗ 2 20 ≈ 2 ∗ 1 0 6 2*2^{20}≈2*10^6 2∗220≈2∗106。
比如样例: 1    10    100    1000    10000 1 \ \ 10 \ \ 100 \ \ 1000 \ \ 10000 1  10  100  1000  10000
前两个的所有情况之和为 0    1    10    11 0 \ \ 1 \ \ 10 \ \ 11 0  1  10  11
后三个的所有情况之和为 0    100    1000    10000    1100    10100    11000    11100 0 \ \ 100 \ \ 1000 \ \ 10000 \ \ 1100 \ \ 10100 \ \ 11000 \ \ 11100 0  100  1000  10000  1100  10100  11000  11100
前半部分搜索出来的所有情况的值存到 b b b数组中,后半部分搜索出来的所以情况存到 c c c数组中。
要找出前半部分 + + +后半部分对 m m m进行取模余数尽可能大的。那我们可以枚举前半部分的所有情况,然后二分查找( l o w e r _ b o u n d lower\_bound lower_bound)一下后半部分中 m − b [ i ] m-b[i] m−b[i]的值,找到的是第一个大于等于 m − b [ i ] m-b[i] m−b[i]的,所以往前减一位即可。
代码:

#include <bits/stdc++.h>
using namespace std;

int n, m, a[50], ans = 0;
vector<int> b, c;
void dfs1(int p, int sum) {
    if (p == n / 2 + 1) {
        b.push_back(sum);
        return ;
    }
    dfs1(p + 1, (sum + a[p]) % m);
    dfs1(p + 1, sum % m);
}

void dfs2(int p, int sum) {
    if (p == n + 1) {
        c.push_back(sum);
        return ;
    }
    dfs2(p + 1, (sum + a[p]) % m);
    dfs2(p + 1, sum % m);
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        a[i] %= m;
    }
    dfs1(1, 0);
    dfs2(n / 2 + 1, 0);
    sort(c.begin(), c.end());
    for (int i = 0; i < b.size(); i++) {
        int p = lower_bound(c.begin(), c.end(), m - b[i]) - c.begin();
        p--;
        ans = max(ans, (b[i] + c[p]) % m);
    }
    cout << ans << endl;
    return 0;
}

第六题:T6位置互换

标签:广度优先搜索
题意:给定一个矩形地图,地图中 . . .代表可以走的空地; # \# #代表不可以走的墙壁; 1 1 1表示小爱初始的位置; 2 2 2表示小艾初始的位置。小爱和小艾可以上下左右走或原地不动,不可以移动到对方当前的位置,求经过多少轮之后,小爱和小艾可以实现互换位置。
题解:把小爱和小艾的整体移动跑 b f s bfs bfs,开个四维 v i s vis vis数组标记一下各自走同步的情况,进行位移的过程中需要把各自 4 4 4个方向,即 4 4 4x 4 4 4种情况都跑一下。跑 b f s bfs bfs的过程中需要注意几个细节:

  1. 如果小爱或者小艾某个人已经跑到对应互换的终点了,就原地保持不动。
  2. 如果发生了当前跑到的两个位置互换的情况,要跳过。比如小爱在 ( 2 , 2 ) (2,2) (2,2)位置要往右走到 ( 2 , 3 ) (2,3) (2,3);小艾在 ( 2 , 3 ) (2,3) (2,3)位置要往左走到 ( 2 , 3 ) (2,3) (2,3)。
  3. 移动到同一个格子的时候,需要让其中一个人原地不动,另一个人走到这个各自上。

整道题细节比较多和需要考虑的点比较多,同学们在写的过程中要注意细节的处理。
代码:

#include <bits/stdc++.h>
using namespace std;

struct node {
	// 当前小爱坐标(x1,y1) 小艾坐标(x2,y2) 步数
	int x1, y1, x2, y2, step;
}st;
int n, m;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
char a[50][50];
bool vis[50][50][50][50];

bool check(int x, int y) {
    return x >= 1 && x <= n && y >= 1 && y <= m && a[x][y] != '#';
}

void bfs() {
    queue<node> q;
    q.push(st);
    vis[st.x1][st.y1][st.x2][st.y2] = 1;
    while (!q.empty()) {
        node p = q.front();
        q.pop();
        if (p.x1 == st.x2 && p.y1 == st.y2 && p.x2 == st.x1 && p.y2 == st.y1) {
            cout << p.step;
            return ;
        }
        // 枚举小爱和小艾的所有方向组合
        for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++) {
            int nx1 = p.x1 + dx[i], ny1 = p.y1 + dy[i];
            int nx2 = p.x2 + dx[j], ny2 = p.y2 + dy[j];

            if (nx1 == p.x2 && ny1 == p.y2 && nx2 == p.x1 && ny2 == p.y1) continue;

            // 如果已经到终点, 原地保持不动
            if (p.x1 == st.x2 && p.y1 == st.y2) nx1 = p.x1, ny1 = p.y1;
            if (p.x2 == st.x1 && p.y2 == st.y1) nx2 = p.x2, ny2 = p.y2;

            if (check(nx1, ny1) && check(nx2, ny2)) {
                if (nx1 == nx2 && ny1 == ny2) { // 移动到同一个格子的情况
                    if (!vis[nx1][ny1][p.x2][p.y2]) {
                        vis[nx1][ny1][p.x2][p.y2] = 1;
                        q.push({nx1, ny1, p.x2, p.y2, p.step + 1});
                    }
                    if (!vis[p.x1][p.y1][nx2][ny2]) {
                        vis[p.x1][p.y1][nx2][ny2] = 1;
                        q.push({p.x1, p.y1, nx2, ny2, p.step + 1});
                    }
                } else { // 不是移动到同一个格子的情况
                    if (!vis[nx1][ny1][nx2][ny2]) {
                        vis[nx1][ny1][nx2][ny2] = 1;
                        q.push({nx1, ny1, nx2, ny2, p.step + 1});
                    }
                }
            }
        }
    }
    cout << "No Solution";
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
        cin >> a[i][j];
        if (a[i][j] == '1') st.x1 = i, st.y1 = j;
        if (a[i][j] == '2') st.x2 = i, st.y2 = j;
    }
    bfs();
    return 0;
}
第三届上海市青少年算法竞赛(中学组)线上同步赛T2分数化简 给定一个分数a/b,若它是一个假分数,请将它化简成带分数形式输出。 阅读详情

相关推荐

第五届上海市青少年算法竞赛网络同步赛(小学组)

第五届上海市青少年算法竞赛网络同步赛(小学组)

lybc2019的博客 580

上海计算机学会第五届上海市青少年算法竞赛T4夹心饼干

所谓夹心饼干,就是从数列中挑出三个数 ai​,aj​,ak​,满足 i

长春高老师编程 1244

上海市青少年算法2022年8月月赛(丙组)

上海市青少年算法2022年8月月赛(丙组)

lybc2019的博客 1206

上海计算机学会第五届上海市青少年算法竞赛T3最大的数字

给定一个十进制整数 n,保证 n 的首位不为 0,你必须删除其中 d 个数字,使得留下的数字最大。请输出留下的最大数。每次删除一位数字,即比它后边那位大的,若没有,删除最后一位。内存限制: 256 Mb时间限制: 1000 ms。

长春高老师编程 822

Unity WebGL发布避坑指南:从内存设置到字体打包,一次搞定所有常见问题

本文详细解析Unity WebGL发布的完整流程,从内存设置到字体打包,提供全面的避坑指南。涵盖关键检查清单、内存与性能优化配置、资源处理专项优化及平台适配技巧,帮助开发者高效解决常见问题,确保项目顺利发布。

weixin_28693309的博客 147

Dify与钉钉轻量级集成:打造企业内部AI助手

企业级聊天机器人开发已成为提升内部协同效率的关键技术。其核心原理在于通过API集成,将AI模型能力与即时通讯平台无缝连接,实现智能问答与自动化流程。从技术价值看,这种集成方案能够显著降低AI应用落地门槛,将前沿的AI能力快速转化为实际生产力。在应用场景上,它尤其适用于HR答疑、IT技术支持、产品知识库等高频内部服务场景。本文聚焦于Dify与钉钉的轻量级集成方案,通过Stream模式实现高效消息处理,并利用AI卡片支持流式输出,为企业构建体验自然的智能机器人提供了完整实践路径。该方案特别强调配置简化与部署便捷

weixin_27155667的博客 694

上海计算机学会2024年5月月赛C++丙组T3发牌

有 n 张牌,在一开始,牌是整理好顺序的,从牌堆顶部开始向下数,第 i 张牌的编号为 i。内存限制: 256 Mb时间限制: 1000 ms。请按照顺序输出玩家收到的牌编号。

长春高老师编程 1049

SAP-ABAP:SAP客户端管理核心事务码SCC4深度解析

SAP客户端管理核心事务码SCC4深度解析

baidu_35680696的博客 1566

上海市计算机学会竞赛平台丙组比赛目录及题解持续更新中

持续更新中。。。

长春高老师编程 1万+

多模型对抗性审查:用AI辩论提升技术文档质量

在软件工程领域,技术文档是团队协作和项目成功的关键基础。传统的文档评审依赖人工经验,存在盲区和效率瓶颈。通过引入多模型对抗性审查机制,不同大语言模型从各自视角对文档进行批判性分析,模拟现实中的专家评审过程。这种技术方法的核心价值在于利用模型间的思维差异,自动发现单个视角容易忽略的边界情况、逻辑漏洞和隐含假设。在应用场景上,特别适合产品需求文档和技术规格书这类需要多角度审视的复杂文档。adversarial-spec工具通过Claude协调多模型辩论,实现从概念到实现的完整文档质量保障,显著提升文档的完整性和

weixin_42531579的博客 379

Ultralytics YOLO模块自定义与替换实战技巧

本文详细介绍了在Ultralytics YOLO框架中进行模块自定义与替换的实战技巧。通过从零开始添加全新模块(如注意力模块)到进阶替换现有模块(如增强版卷积),并涵盖模块注册、YAML配置、模型融合及ONNX导出等关键步骤,帮助开发者深度定制YOLO模型,以应对复杂检测任务与部署需求。

numpy6sculptor的博客 930

上海计算机学会第五届上海市青少年算法竞赛T1符号译码

可以确定的是,符合编码规则的 01 序列只能对应一种唯一的符号序列。给定一串符合编码规则 01 序列,请还原它对应的符号序列。根据这套编码规则,任意长的标点符号序列可以编码成 01 序列,例如。内存限制: 256 Mb时间限制: 1000 ms。设 b 表示输入数据的长度,则。

长春高老师编程 926

SmartFusion从FPGA到ARM(九)——串口命令解析器的实现

系列教程:SmartFusion从FPGA到ARM系列教程 前面两节介绍了MSS_UART和CoreUARTapb的使用: MSS_UART的使用 CoreUARTapb的使用 MSS_UART和CoreUARTapb都支持中断和轮询方式获取串口接收的数据,对于串口中断服务函数,有时我们需要通过不同的串口指令去执行不同的动作,下面以CoreUARTapb为例,来实现一个简单的串口命令解析器。固定串口数据帧格式,帧长度不定。 串口数据帧格式:* + 数据 + #,对于数据中为参数的,可以自定义处理函数。例

whik1194的博客 1534

上海计算机学会第五届上海市青少年算法竞赛T2数对排序

由两个自然数组成的一对数称之为有序数对。有序是指数对的第一项与第二项是区别的,例如 (0,1),(1,0) 是不一样的数对。根据规律和为i的在第i+1行,第i行一共i个数对,每行第j个数对是j-1开头,则可以快速找到第k个数对。内存限制: 256 Mb时间限制: 1000 ms。给定一个整数 k,请求出第 k 个数对。按照这个规则排序,前 66 项数对为。

长春高老师编程 1049

apple游客下单逆向分析

Apple游客下单Cookies注册激活流程逆向分析与算法实现

吴秋霖的博客 1998

86、高斯过程:学习、应用与自动相关性确定

本文介绍了高斯过程回归的基本原理及其在实际应用中的关键技术,重点探讨了通过最大化对数似然函数来学习模型超参数的方法,并详细阐述了自动相关性确定(ARD)技术如何用于评估输入变量的重要性。文章涵盖了从协方差函数定义、梯度计算到优化算法的应用流程,并通过流程图和表格形式总结了核心步骤与公式。此外,还讨论了贝叶斯处理方式及异方差问题的建模策略,展示了高斯过程在复杂数据建模中的灵活性与强大能力。

android的专栏 114

第五届上海市青少年算法竞赛 T6 位置互换(广度优先搜索)

第五届上海市青少年算法竞赛 T6 位置互换(广度优先搜索)

超哥聊信奥 1132

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++上机题目(第五届上海市青少年算法竞赛题)

可以确定的是,符合编码规则的01序列只能对应一种唯一的符号序列。有序是指数对的第一项与第二项是区别的,例如(0,1),(1,0)是不一样的数对。给定一个十进制整数n,保证n的首位不为0,你必须删除其中d个数字,使得留下的数字最大。迷宫游戏是在- -张 n x m的网格图中进行的,其中a(ij) 表示第i行、第j列网格的状态,给定n个数字a1,a.....n,在给定一-个整数 m,请从给定的数字中挑选任意多个数字,接下来的第2行至第n+1行,每行m个字符,其中第i+1行、第j列的字符表示初。

qq_39127687的博客 1226

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上海计算机学会第五届上海市青少年算法竞赛T6位置互换

问题2:这个问题发生在两人都走向同一个格子的时候,那么特判处理一下,让一个走,一个不走,记录状态即可,需要注意一个走,一个不走有两种情况,都要处理。接下来的第 2 行至第 n+1 行,每行 m 个字符,其中第 i+1 行、第 j 列的字符表示初始时网格 a(i,j)​ 的状态。问题1:两个人走过的位置需要两个坐标,如果用维数组记录走过的位置,则哪怕走过了,只要坐标的组合没出现过,,则不处理,那么没有数据入队,程序提前结束,输出无法完成的信息即可。从样例3可知,可以一个走,一个不走,如何解决?

长春高老师编程 2526

第五届上海市青少年算法竞赛 T3 最大的数字(字符串、栈、贪心)

第五届上海市青少年算法竞赛 T3 最大的数字(字符串、栈、贪心)

超哥聊信奥 1440

第五届上海市青少年算法竞赛 T5 最大的余数(折半查找)

第五届上海市青少年算法竞赛 T5 最大的余数(折半查找)

超哥聊信奥 854

第五届上海市青少年算法竞赛 T1 符号译码(字符串、枚举模拟、map)

第五届上海市青少年算法竞赛 T1 符号译码(字符串、枚举模拟、map)

超哥聊信奥 845

第五届上海市青少年算法竞赛 T2 数对排序(数学、思维)

第五届上海市青少年算法竞赛 T2 数对排序(数学、思维)

超哥聊信奥 1468

上计会青少年算法竞赛3月月赛

3月月赛丙组题 https://iai.sh.cn/contest/3 打鱼还是晒网 5天一个周期,如果 n 除以5的余数是4或者0,就是晒网;否则就是打鱼 注意:任何正整数除以 r 的余数的范围是 0 ~ (r-1) #include <iostream> using namespace std; int main() { int n; cin >> n; if (n%5==0 || n%5==4) cout << "Lying" <&lt

中学生信竞 810

第五届上海市青少年算法竞赛 T4 夹心饼干(思维、数学)

第五届上海市青少年算法竞赛 T4 夹心饼干(思维、数学)

超哥聊信奥 1131

第五届上海市青少年算法竞赛现场赛小学组数对排序

由两个自然数组成的一对数称之为有序数对。有序是指数对的第一项与第二项是区别的,例如 (0,1)(0,1),(1,0)(1,0) 是不一样的数对。给定一个整数 �k,请求出第 �k 个数对。按照这个规则排序,前 66 项数对为。

a121677_的博客 831
上一篇: 上海计算机学会 2024年3月月赛 丙组T4 交易记录(map)
下一篇: 上海计算机学会 2023年6月月赛 乙组T1 两数归零(STL、map)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值