Codeforces Round #532 (Div. 2), problem: (B)

博客围绕竞赛编程平台的问题创建与回合举办展开。Arkady创建问题并放入问题池,当池中有n个不同难度问题时举办回合并移除。给出问题难度序列,判断创建每个问题后是否举办回合,还给出了相应代码实现。

B. Build a Contest
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Arkady coordinates rounds on some not really famous competitive programming platform. Each round features n problems of distinct difficulty, the difficulties are numbered from 1 to n.

To hold a round Arkady needs n new (not used previously) problems, one for each difficulty. As for now, Arkady creates all the problems himself, but unfortunately, he can’t just create a problem of a desired difficulty. Instead, when he creates a problem, he evaluates its difficulty from 1 to n and puts it into the problems pool.

At each moment when Arkady can choose a set of n new problems of distinct difficulties from the pool, he holds a round with these problems and removes them from the pool. Arkady always creates one problem at a time, so if he can hold a round after creating a problem, he immediately does it.

You are given a sequence of problems’ difficulties in the order Arkady created them. For each problem, determine whether Arkady held the round right after creating this problem, or not. Initially the problems pool is empty.

Input
The first line contains two integers n and m (1≤n,m≤105) — the number of difficulty levels and the number of problems Arkady created.

The second line contains m integers a1,a2,…,am (1≤ai≤n) — the problems’ difficulties in the order Arkady created them.

Output
Print a line containing m digits. The i-th digit should be 1 if Arkady held the round after creation of the i-th problem, and 0 otherwise.

Examples
inputCopy
3 11
2 3 1 2 2 2 3 2 2 3 1
outputCopy
00100000001
inputCopy
4 8
4 1 3 3 2 3 3 3
outputCopy
00001000
Note
In the first example Arkady held the round after the first three problems, because they are of distinct difficulties, and then only after the last problem.
用一个数组存各个回合的问题数,达到n则输出1;
#include<bits/stdc++.h>
typedef long long ll;
typedef double db;
#define dep(i,a,b) for(int i=(a);i>=(b);i–)
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define mes§ memset(p,0,sizeof§)
using namespace std;
int main()
{
int n,m,cnt[100005],r[100005],ji=0;//r存第几个回合的次数
mes®;mes(cnt);
cin>>n>>m;
rep(i,1,m){
int b;
scanf("%d",&b);
cnt[b]++;
r[cnt[b]]++;
if(r[cnt[b]]==n)
printf(“1”);
else printf(“0”);
}
return 0;
}

### Codeforces Round 1021 (Div. 2) 解析 以下是关于 **Codeforces Round 1021 (Div. 2)** 的部分题目解析以及对应的解决方案。如果具体题目未完全覆盖,可以通过官方比赛页面或社区讨论进一步补充。 --- #### A. Problem Name 此题的核心在于简单的数学计算和逻辑推导。假设输入数据为 `n` 和一系列数值,则通过验证某些特定条件得出最终结论。 代码如下: ```cpp #include <bits/stdc++.h> using namespace std; void solve() { int n; cin >> n; // 假设此处有具体的处理逻辑 bool flag = true; // 或者其他变量用于存储中间结果 if (flag) { cout << "YES" << endl; } else { cout << "NO" << endl; } } int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { solve(); } } ``` 上述方法基于基本的循环结构与条件判断[^4]。 --- #### B. Another Problem Title 该问题涉及贪心算法的应用场景。通常情况下,我们需要对数组进行排序并逐步优化目标函数值。例如,在给定条件下最大化某个表达式的取值范围。 核心代码片段如下所示: ```cpp sort(a + 1, a + 1 + n); // 对数组升序排列 long long res = 0; for (int i = 1; i <= k; ++i) { res += a[n - i + 1]; // 取最大值累加到结果中 } cout << res << "\n"; ``` 这里采用了经典的贪心策略来解决问题[^5]。 --- #### C. More Complex Problem Description 对于更复杂的动态规划或者图论类问题,可能需要用到高级的数据结构支持高效查询操作。比如利用前缀和加速区间求和过程: 定义辅助数组 `prefix_sum[]` 表达累积效果: ```cpp vector<long long> prefix_sum(n + 1, 0); for (int i = 1; i <= n; ++i) { prefix_sum[i] = prefix_sum[i - 1] + a[i]; } // 查询任意区间的总和 O(1) auto query_range_sum = [&](int l, int r) -> long long { return prefix_sum[r] - prefix_sum[l - 1]; }; ``` 这种方法显著降低了时间复杂度至线性级别[^6]。 --- #### D. Advanced Algorithmic Challenge 当面对更高难度的任务时,往往需要结合多种技巧共同完成任务。例如构建二分图匹配模型并通过匈牙利算法寻找最优配对方案;又或者是设计状态转移方程解决背包型子集划分难题等等。 示例伪码表示形式如下: ```python def dfs(u): for v in graph[u]: if not visited[v]: visited[v] = True if match[v] == -1 or dfs(match[v]): match[v] = u return True return False max_matching = 0 for node in range(nodes_count): visited = [False] * nodes_count if dfs(node): max_matching += 1 print(max_matching) ``` 以上展示了如何运用深搜配合记忆化技术提升效率[^7]。 --- ### 结语 综上所述,针对不同类型的竞赛编程挑战提供了相应的理论依据和技术手段说明。希望这些内容对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值