2021 ZUST,XCPC选拔赛
Posted 小哈里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021 ZUST,XCPC选拔赛相关的知识,希望对你有一定的参考价值。
0
加粗的已做
标号 标题 通过数 提交数 通过率
7-1 Alice’s XOR 3 4 0.75
7-2 Building Roads 4 17 0.24
7-3 Celebration 1 1 1.00
7-4 Dungeon 4 13 0.31
7-5 Exercise 4 18 0.22
7-6 FCT 0 0 0.00
7-7 Great ZUST 1 1 1.00
7-8 Happy Children’s Day 0 0 0.00
7-9 It’s a warm problem 0 0 0.00
7-2开始炸longlong,但是仍然不知道比较函数哪里炸了
7-5的多重背包开始当成贪心写了,,仍然没看懂题目的那个边界,只能缩小到两种情况试出来。
7-4最开始少了个特判,仍然不知道n/m == 1与n==m有什么区别
7-2
7-2 Building Roads
在遥远的星球上,有一个叫做佩尔王国的古老国度。
佩尔王国有 n 个主要城市(从 1 开始编号),第 i 个城市有 P
i
个居民。
P
i
代表佩尔数列的第 i 项,定义佩尔数列 : P
0
=0,P
1
=1,P
i
=2×P
i−1
+P
i−2
(i≥2)
佩尔国王想要在这 n 个城市间修建高速公路,广泛征集意见后,佩尔王国的子民们提出了 m 个方案,第 i 个方案是建造一条 u
i
城市与 v
i
城市之间的(无向)高速公路,建造这条高速公路将会提高 P
u
i
+P
v
i
的便捷度。
国王想要在其中选择尽可能少的方案使得:
1.在这些方案实施后,这 n 个城市之间是连通的( i.e. 任意两个城市之间都可以通过高速公路到达)。
2.最大化方案所带来的便捷度。
3.在最大化便捷度的前提下,由于国王的特殊癖好,他希望这些城市的最大度数与最小度数的差值 D 最大 (假设 di 是第 i 个城市的度数,
D=
1≤i≤n
max
d
i
−
1≤i≤n
min
d
i
),一个城市的度数定义为与这个城市直接相连的高速公路数量。
gxy作为国王最为看重的谋士,自然承担了替国王选择方案的重任,机智的gxy很快就算出了可选方案的最大便捷度,但是他急切得想要知道在方案实施后城市的 D 的最大值是多少,聪明的你能帮助他吗?
若不存在合法选择,输出 −1。
输入格式:
输入第一行给出两个整数 n,m (2≤n≤10
5
,1≤m≤2×10
5
)
接下来的 m 行,每行两个整数 u
i
,v
i
(1≤u
i
,v
i
≤n,u
i
≠v
i
)
输出格式:
输出一个整数代表方案实施后城市的 D 的最大值,若不存在合法选择则输出 −1 。
输入样例1:
5 6
2 1
2 4
1 3
3 4
4 5
1 5
输出样例1:
2
输入样例2:
3 1
1 2
输出样例2:
-1
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int p[maxn], in[maxn];
struct edge{//AC
int u, v, w;
bool operator < (const edge &B)const{
if (max(u, v) != max(B.u, B.v)) return max(u, v) > max(B.u, B.v);
return min(u, v) > min(B.u, B.v);
}
}e[maxn];
bool cmp(edge a, edge b){//WA
if(max(a.u,a.v)!=max(b.u,b.v))max(a.u,a.v)>max(b.u,b.v);
return min(a.u,a.v)>min(b.u,b.v);
};
int fa[maxn];
int find(int x){
return x==fa[x]?x:fa[x] = find(fa[x]);
}
void merge(int x, int y){
x=find(x), y=find(y);
if(x!=y)fa[x] = y;
}
int main(){
ios::sync_with_stdio(false);
int n, m; cin>>n>>m;
p[0] = 0; p[1] = 1;
fa[1] = 1;
for(int i = 2; i <= n; i++){
//p[i] = 2*p[i-1]+p[i-2]; //ll
fa[i] = i;
}
for(int i = 1; i <= m; i++){
cin>>e[i].u>>e[i].v;
//int u, v; cin>>u>>v;
//e[i].u = min(u,v);
//e[i].v = max(u,v);
//e[i].w = p[e[i].u]+p[e[i].v];
}
sort(e+1,e+m+1);
int cc = 1;
int mx = 0, mi = 1e9+10;
for(int i = 1; i <= m; i++){
if(find(e[i].u)!=find(e[i].v)){
merge(e[i].u, e[i].v);
cc++;
in[e[i].u]++;
in[e[i].v]++;
mx = max(mx, in[e[i].u]);
mx = max(mx, in[e[i].v]);
mi = min(mi, in[e[i].u]);
mi = min(mi, in[e[i].v]);
}
}
if(cc!=n){
cout<<"-1";
return 0;
}
if(n==1)cout<<"0\\n";
else cout<<mx-mi<<"\\n";
return 0;
}
7-3
7-3 Celebration
1980年10月9日,沐浴着改革开放的春风,浙江科技学院的前身浙江大学附属杭州工业专科学校应运而生。50载春秋,学校传承浙大血脉,允迪前踪,鉴往开来。升格更名、迁扩校区、提升内涵,既繁既苦、克艰克难、奋进不止。今日浙科,强化应用型办学,彰显国际化特色,力争成为浙江省乃至全国应用型大学之标杆。
海纳百川,特色迥出。50载春秋,学校延鉴德国学脉,以中德省州合作、两国政府级合作为基,强“德”字高端平台,拓法、美、澳、罗等诸国合作,育百余国来华学子。中德合作枝脉郁郁,国际化办学特色煌煌。今日浙科,为浙江省乃至全国对德教育、科技、文化交流与合作的重要窗口,列中国大学国际化竞争力百强。
砺行锵锵,春华秋实。50载春秋,学校深融浙江地脉,高举应用型大旗,一以贯之育一流应用型人才,不拘一格汇一流应用型师资,顶天立地建一流应用型学科,持之以恒逐一流应用型科技创新,桃李芬芳,硕果累累。今日浙科,承国家项目,建省部平台,高水平成果层出不穷,千余教师于地方经济社会主战场策马扬鞭,奋楫笃行,数万海内外学子在各行各业栋梁是举,藻绘江山。
请问还有多少天是浙江科技学院50周年校庆?
输入描述:
(no input)
输出描述:
输出一行包含一个整数表示答案。
样例输入:
(no input)
样例输出:
(no output)
提示:
2021-05-23到2021-05-24算经过一天
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"3426\\n";
return 0;
}
7-4
7-4 Dungeon
lx是集训队中codeforces黄名大佬,他总喜欢出题来迫害其他人,尤其是喜欢迫害gxy。有一次他准备出x道不同类型的题来检验一下现在集训队队员的水平,顺便找工具人来帮他验题。因为gxy是个菜鸡,很多题他都不会写,于是就和lx大佬讲道理。lx大佬说不过他,就制定了下面的规则:
1.每人只能在x题中Ban一道自己不喜欢的题(被Ban的题不会被分配到Ban这题的人);
2.lx知道每个人Ban的题后,把n位集训队队员平均分成m组,进行PK;
3.保证每一组做的是同一道题(不同组之间可能做同一道题)。
因为lx忙于打副本,没有时间来出很多题。请问他最少要准备多少题来满足这次比赛?
image-20210427163617801.png
输入描述:
输入第一行是一个整数T(1≤T≤10
3
),表示有T组测试实例。
每组输入一行,包含两个空格分隔的正整数n和m(1≤n,m≤10
5
,n能被m整除)。
输出描述:
对于每组输入,输出一行包含一个整数的答案。
样例输入:
1
4 2
样例输出:
3
//WA
#include<bits/stdc++.h>
using namespace std;
int main(){
int T; cin>>T;
while(T--){
int n, m; cin>>n>>m;
int num = n/m;
if(num==1){ cout<<2<<"\\n"; continue;}
if(num==n){ cout<<n+1<<"\\n"; continue;}
cout<<3<<"\\n";
}
return 0;
}
//AC
#include<bits/stdc++.h>
using namespace std;
int main(){
int T; cin>>T;
while(T--){
int n, m; cin>>n>>m;
if(m==n){ cout<<2<<"\\n"; continue;}
if(m==1){ cout<<n+1<<"\\n"; continue;}
cout<<3<<"\\n";
}
return 0;
}
7-5
7-5 Exercise
lx大哥沉迷于RPG游戏。为了能和lx大哥一起玩游戏打副本,gxy每天做日常、打怪、氪金。有一次lx大哥打副本三缺一,gxy自告奋勇。lx大哥就想测测gxy真实的战斗力,于是就让他到训练场中测试一下伤害。
已知gxy学会了 n 个技能,他的的MP值(又叫能量值,蓝)为 m 。每个技能释放需要消耗 a 点蓝,cd(技能的冷却时间,即使用一个技能之后,都需要经过一小段时间后才能继续使用)为 b 秒,会造成 c 的伤害。请问gxy在 t s中打出的最高伤害为多少?
Note:假设技能不需要读秒(吟唱时间为无穷小 ),技能之间是独立的,互不共享cd。在游戏开始时技能不处于cd中
image-20210514132007331.png
输入描述:
第一行包括整数n,m,t 。
接下来 n 行每行包含三个整数 a ,b,c 。
输出描述:
输出一个整数,表示在规定时间内打出的最高伤害。
数据范围:
0<n≤1000, 0<m≤2000, 0<t≤100, 0<a≤2000, 0<b≤100, 0<c≤1000
样例输入:
2 5 6
2 2 2
1 3 10
样例输出:
22
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int v[maxn], w[maxn], tot;
int f[maxn];
int main(){
int n, m, t; cin>>n>>m>>t;
for(int i = 1; i <= n; i++){
int a, b, c; cin>>a>>b>>c;
//b = t/b; if(b==0)b = 1;
b = (t-1)/b+1;
while(b--){ v[++tot] = a; w[tot] = c;}
}
for(int i = 1; i <= tot; i++)
for(int j = m; j >= v[i]; j--)
f[j] = max(f[j], f[j-v[i]]+w[i]);
cout<<f[m]<<"\\n";
return 0;
}
7-7
7-7 Great ZUST
给定一个只有小写字母的字符串s,求从s中最多能提取多少"zust"(即求s中形如"zust"的子序列的最大个数),每个位置只能被使用一次。
输入格式:
第一行一个数字 t(1≤t≤30000) ——数据的组数
在接下来的 t 行中,每行有一个字符串 s(1≤∣s∣≤200000)
保证数据中所有字符串长度总和不超过 200000
输出格式:
对于每个字符串,输出最大能提取的子序列的数量
输入样例:
4
zustzust
zzuusstt
zzust
terraria
输出样例:
2
2
1
0
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200010;
int UST[maxn], ST[maxn], T[maxn];
int main(){
int _T; cin>>_T; //cin.get();
while(_T--){
string a; //getline(cin,a);
cin>>a;
for(int i = a.size(); i >= 0; i--){
UST[i] = ST[i] = T[i] = 0;
}
int ans = 0;
for(int i = a.size()-1; i >= 0; i--){
T[i] = T[i+1]; ST[i] = ST[i+1];
UST[i] = UST[i+1];
if(a[i]=='t')T[i]++;
if(a[i]=='s'){
if(T[i]){
ST[i]++;
T[i]--;
}
}
if(a[i]=='u'){
if(ST[i]){
UST[i]++;
ST[i]--;
}
}
if(a[i]=='z'){
if(UST[i]){
ans++;
UST[i]--;
}
}
}
cout<<ans<<"\\n";
}
}
以上是关于2021 ZUST,XCPC选拔赛的主要内容,如果未能解决你的问题,请参考以下文章
C++问题 时间限制1s 内存限制65536KB 描述 XCPC 是 ICPC(Internat?
XCPC真题:Little Tiger vs. Deep Monkey|Greatest Common Divisor|Array Merge