codeforce Round 934 div2 个人题解(A~C)

A. Destroying Bridges

时间限制: 1秒
内存限制: 256兆
输入: 标准输入
输出: 标准输出

nnn 个岛屿,编号为 1,2,…,n1,2,…,n1,2,,n。最初,每对岛屿都由一座桥连接。因此,一共有 n(n−1)2\frac{n(n-1)}{2}2n(n1) 座桥。

Everule 住在岛屿 111 上,喜欢利用桥梁访问其他岛屿。Dominater 有能力摧毁最多 kkk 座桥梁,以尽量减少 Everule 可以使用(可能是多座)桥梁到达的岛屿数量。

如果 Dominater 以最佳方式摧毁桥梁,求 Everule 可以访问的岛屿(包括岛屿 111)的最少数量。


输入

每个测试包含多个测试用例。第一行包含一个整数 ttt (1≤t≤1031 \leq t \leq 10^31t103) - 测试用例的数量。测试用例说明如下。

每个测试用例的第一行也是唯一一行包含两个整数 nnnkkk (1≤n≤1001 \leq n \leq 1001n100, 0≤k≤n⋅(n−1)20 \leq k \leq \frac{n \cdot (n-1)}{2}0k2n(n1))。


输出

针对每个测试案例,输出如果 Dominater 以最佳方式摧毁桥梁,Everule 可以访问的最少岛屿数量。

示例

输入
6
2 0
2 1
4 1
5 10
5 3
4 4
输出
2
1
4
1
5
1

注意

在第一个测试案例中,由于无法摧毁桥梁,所以所有岛屿都可以到达。

在第二个测试案例中,您可以摧毁 111 岛和 222 岛之间的桥梁。Everule 将无法访问岛屿 222,但仍然可以访问岛屿 111。因此,Everule 可以访问的岛屿总数为 111

在第三个测试案例中,尽管 Dominater 做了什么,Everule 总是有办法到达所有的岛屿。例如,如果 "多米那 "摧毁了岛屿 111222 之间的桥梁,由于 111333 之间以及 333222 之间的桥梁没有被摧毁,埃弗鲁勒仍然可以通过 1→3→21→3→2132 到达岛屿 222

在第四个测试案例中,你可以摧毁 k=n⋅(n−1)2k = \frac{n \cdot (n-1)}{2}k=2n(n1) 之后的所有桥梁。Everule 将只能访问 111 岛(111 岛)。

解题思路

nnn个岛屿,每个岛屿之间相互连接,那么一座岛屿最多有n−1n-1n1座桥连接,如果k>=n−1k>=n-1k>=n1,直接把1岛上的所有桥全拆了,只能经过一座岛。如果k<n−1k<n-1k<n1,那么无论怎么拆所有岛都是联通的。

题解

#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <unordered_map>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <list>
#include <bitset>
#include <cmath>

#define endl '\n'

#define ft first
#define sd second

#define yes std::cout<<"Yes\n"
#define no std::cout<<"No\n"


using namespace std;

typedef long long ll;
typedef unsigned long long ull;

typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef pair<string, int> psi;
typedef pair<string, ll> psl;

typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<string> vs;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<pss> vpss;

typedef vector<vi> vvi;
typedef vector<vl> vvl;

typedef queue <int> qi;
typedef queue <ll> ql;
typedef queue <pii> qpii;
typedef queue <pll> qpll;
typedef queue <psi> qpsi;
typedef queue <psl> qpsl;

typedef priority_queue<int> pqi;
typedef priority_queue<ll> pql;
typedef priority_queue<string> pqs;
typedef priority_queue<pii> pqpii;
typedef priority_queue<psi> pqpsi;
typedef priority_queue<pll> pqpl;
typedef priority_queue<psi> pqpsl;

typedef map<int, int> mii;
typedef map<ll, ll> mll;
typedef map<char, int> mci;
typedef map<char, ll> mcl;
typedef map<string, int> msi;
typedef map<string, ll> msl;

typedef unordered_map<int, int> umii;
typedef unordered_map<ll, ll> uml;
typedef unordered_map<char, int> umci;
typedef unordered_map<char, ll> umcl;
typedef unordered_map<string, int> umsi;
typedef unordered_map<string, ll> umsl;


void cinv(vi vec, int n)
{
   
   
    for (int i = 1; i <= (n); i++)
        cin >> (vec)[i];
}
void rcinv(vi vec, int n)
{
   
   
    for 
### Codeforces 题目解法代码示例 对于给定的编程竞赛平台Codeforces上的题目,通常会提供多组测试数据来验证程序的正确性效率。当处理包含括号匹配的问题时,可以采用栈结构或计数器方法来进行求解。 针对特定类型的括号序列问题,一种常见的策略是从左至右遍历字符串并维护两个变量:`dep`用于记录当前未配对的'('数量;每当遇到一个'('字符时,`dep`增加1。另一个变量`now`用来追踪问号 '?' 的数目[^4]。 下面是解决此类问题的一个Python实现例子: ```python def solve_parentheses_sequence(s: str) -> bool: dep, now = 0, 0 for char in s: if char == '(': dep += 1 elif char == ')': if dep > 0: dep -= 1 elif now > 0: now -= 1 else: return False elif char == '?': now += 1 # Check remaining unpaired '(' and '?' while dep > 0 and now > 0: dep -= 1 now -= 1 return dep == 0 # Example usage with multiple test cases as described in the problem statement. if __name__ == "__main__": import sys input = sys.stdin.read data = input().split() t = int(data[0]) # Number of test cases index = 1 results = [] for _ in range(t): sequence_length = int(data[index]) sequence = data[index + 1][:sequence_length] result = "YES" if solve_parentheses_sequence(sequence) else "NO" results.append(result) index += 2 print("\n".join(results)) ``` 此段代码实现了上述提到的方法,并能够处理多个测试实例。通过读取标准输入中的所有数据,解析每个测试案例的信息,调用`solve_parentheses_sequence()`函数判断给定序列是否可以通过适当替换问号形成合法的括号表达式,最后输出对应的结果列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值