P9087 「SvR-2」音符题目描述本题中「子串」指若字符串sss中有一段连续的字符构成字符串ppp则ppp是sss的子串。我们用一个字符串代替一份乐谱用字符代替每一个音符。我们定义「重音」表示乐谱中出现了两个连续的相同字符如eeeee\tt eeeeeeeeee中存在444个「重音」。现在 Sept 准备写一份长度为nnn的乐谱给 Tpes 看他对乐谱的评价标准如下乐谱中每出现一个「重音」他的愤怒值就会增加aaa。乐谱中每有一段长度为kkk的子串中不存在「重音」他的愤怒值就会增加bbb。现在已知n,k,a,bn,k,a,bn,k,a,b请你帮 Sept 构造出一份乐谱使得 Tpes 的愤怒值xxx最小。输入格式本题有多组数据。第一行一个整数TTT表示数据组数。接下来TTT行每行两个整数n,k,a,bn,k,a,bn,k,a,b意义如题目所述。输出格式共2⋅T2 \cdot T2⋅T行对于每组数据都输出两行第 1 行表示 Tpes 最小的愤怒值xxx。第 2 行表示你构造出的乐谱。输入输出样例 #1输入 #12 4 5 2 2 8 6 3 2输出 #10 Sept 3 2023yyds说明/提示数据规模与约定本题采用捆绑测试。Subtask\bf{Subtask}Subtaskn≤\bm{n\le}n≤∑n≤\bm{\sum n\le}∑n≤T≤\bm{T\le}T≤Score\bf{Score}Score1\sf 1166610101033310\tt 10102\sf 2210310^31032×1032\times 10^32×103无特殊限制30\tt 30303\sf 33无特殊限制无特殊限制无特殊限制60\tt 6060对于100%100\%100%的数据有2≤T≤1002\le T\le 1002≤T≤1002≤n,k≤1052\le n,k\le 10^52≤n,k≤1051≤a,b≤1091\le a,b\le 10^91≤a,b≤109。单组数据内保证∑n≤2×105\sum n\le 2\times 10^5∑n≤2×105。输出注意事项输出xxx和构造乐谱可以看作是两个子问题如果你只会完成其中的一个请在另一个子问题对应的地方用符合要求的字符或数字占位。乐谱中你可以输出任意字符包括数字、大小写字母等但不能出现空格。Special Judge 返回信息说明本题采用 Special Judge 判断你的答案是否正确。checker.cpp 将会以ScoreA,TypeB\texttt{Score}\text A,\texttt{Type}\text BScoreA,TypeB的方式返回信息。Score\tt ScoreScore类表示你的得分情况A\text AA有以下取值A1\text A1A1表示含义如下Accepted. Your Ans and SM are both proper.\text{Accepted.} \texttt{ Your Ans and SM are both proper.}Accepted.Your Ans and SM are both proper.代表TTT组答案全部符合要求。A2\text A2A2表示含义如下Partially Correct. All Ans are right.\text{Partially Correct.}\texttt{ All Ans are right.}Partially Correct.All Ans are right.表示该测试点中你的回答中xxx全部正确你能得到该测试点20%20\%20%的分数。A3\text A3A3表示含义如下Partially Correct. You pass 70% tests!\text{Partially Correct.}\texttt{ You pass 70\% tests!}Partially Correct.You pass 70% tests!表示该测试点中你的回答正确的组数不少于⌊0.7×T⌋\lfloor0.7\times T\rfloor⌊0.7×T⌋xxx与乐谱均符合要求你能得到该测试点10%10\%10%的分数。A4\text A4A4表示该测试点你只能拿到000分。Type\tt TypeType类表示你的得分情况B\text BB有以下取值B0\text B0B0表示你的答案全部正确与A1\text A1A1配对。B1\text B1B1表示含义如下Wrong Answer. The length of your SM is not right!\text{Wrong Answer.}\texttt{ The length of your SM is not right!}Wrong Answer.The length of your SM is not right!代表你在一组数据中构造的乐谱的长度不为nnn。B2\text B2B2表示含义如下Wrong Answer. Your Ans is not right!\text{Wrong Answer.}\texttt{ Your Ans is not right!}Wrong Answer.Your Ans is not right!代表你在一组数据中xxx的值错误。B3\text B3B3表示含义如下Wrong Answer. Your Ans and SM are not matched!\text{Wrong Answer.}\texttt{ Your Ans and SM are not matched!}Wrong Answer.Your Ans and SM are not matched!代表你在一组数据中构造的乐谱使 Tpes 产生的愤怒值不为xxx。这里Ans, SM\text{Ans, SM}Ans, SM分别表示 Answerxxx的值和 Sheet Music乐谱。注意到Type\tt TypeType只会反映你在该测试点中第一次错误的类型。C实现#includebits/stdc.husingnamespacestd;#defineintlonglongconstintN1e55;chars[N];charname[10]Nahida;/*随机定义一个不含有 XX 的字符串即可*/charsame[10]AC;/*选择两个字符是因为 k3 时这种构造方案会出现 XXXX 的情况改为 XXYY 即可*/intT,n,k,a,b;signedmain(){cinT;while(T--0){intans0,cnt0,m0;cinnkab;s[n1]\0;for(inti1;in;i)s[i](k2ab)?Q:name[(i-1)%6];if(k2){ans(n-1)*min(a,b);gotoprint;}if(a(k-1)*b){ansb*(n-k1);gotoprint;}for(intl1,r;mlk-1,(rmk-2)n;lm)s[m]s[m-1]same[(cnt)1];if(a(n-m1)*b)s[m]s[m-1]same[(cnt)1];elseans(n-m1)*b;print:coutmax(ansa*cnt,0ll)\n(s1)\n;}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
打卡信奥刷题(3302)用C++实现信奥题 P9087 「SvR-2」音符
发布时间:2026/5/23 7:42:48
P9087 「SvR-2」音符题目描述本题中「子串」指若字符串sss中有一段连续的字符构成字符串ppp则ppp是sss的子串。我们用一个字符串代替一份乐谱用字符代替每一个音符。我们定义「重音」表示乐谱中出现了两个连续的相同字符如eeeee\tt eeeeeeeeee中存在444个「重音」。现在 Sept 准备写一份长度为nnn的乐谱给 Tpes 看他对乐谱的评价标准如下乐谱中每出现一个「重音」他的愤怒值就会增加aaa。乐谱中每有一段长度为kkk的子串中不存在「重音」他的愤怒值就会增加bbb。现在已知n,k,a,bn,k,a,bn,k,a,b请你帮 Sept 构造出一份乐谱使得 Tpes 的愤怒值xxx最小。输入格式本题有多组数据。第一行一个整数TTT表示数据组数。接下来TTT行每行两个整数n,k,a,bn,k,a,bn,k,a,b意义如题目所述。输出格式共2⋅T2 \cdot T2⋅T行对于每组数据都输出两行第 1 行表示 Tpes 最小的愤怒值xxx。第 2 行表示你构造出的乐谱。输入输出样例 #1输入 #12 4 5 2 2 8 6 3 2输出 #10 Sept 3 2023yyds说明/提示数据规模与约定本题采用捆绑测试。Subtask\bf{Subtask}Subtaskn≤\bm{n\le}n≤∑n≤\bm{\sum n\le}∑n≤T≤\bm{T\le}T≤Score\bf{Score}Score1\sf 1166610101033310\tt 10102\sf 2210310^31032×1032\times 10^32×103无特殊限制30\tt 30303\sf 33无特殊限制无特殊限制无特殊限制60\tt 6060对于100%100\%100%的数据有2≤T≤1002\le T\le 1002≤T≤1002≤n,k≤1052\le n,k\le 10^52≤n,k≤1051≤a,b≤1091\le a,b\le 10^91≤a,b≤109。单组数据内保证∑n≤2×105\sum n\le 2\times 10^5∑n≤2×105。输出注意事项输出xxx和构造乐谱可以看作是两个子问题如果你只会完成其中的一个请在另一个子问题对应的地方用符合要求的字符或数字占位。乐谱中你可以输出任意字符包括数字、大小写字母等但不能出现空格。Special Judge 返回信息说明本题采用 Special Judge 判断你的答案是否正确。checker.cpp 将会以ScoreA,TypeB\texttt{Score}\text A,\texttt{Type}\text BScoreA,TypeB的方式返回信息。Score\tt ScoreScore类表示你的得分情况A\text AA有以下取值A1\text A1A1表示含义如下Accepted. Your Ans and SM are both proper.\text{Accepted.} \texttt{ Your Ans and SM are both proper.}Accepted.Your Ans and SM are both proper.代表TTT组答案全部符合要求。A2\text A2A2表示含义如下Partially Correct. All Ans are right.\text{Partially Correct.}\texttt{ All Ans are right.}Partially Correct.All Ans are right.表示该测试点中你的回答中xxx全部正确你能得到该测试点20%20\%20%的分数。A3\text A3A3表示含义如下Partially Correct. You pass 70% tests!\text{Partially Correct.}\texttt{ You pass 70\% tests!}Partially Correct.You pass 70% tests!表示该测试点中你的回答正确的组数不少于⌊0.7×T⌋\lfloor0.7\times T\rfloor⌊0.7×T⌋xxx与乐谱均符合要求你能得到该测试点10%10\%10%的分数。A4\text A4A4表示该测试点你只能拿到000分。Type\tt TypeType类表示你的得分情况B\text BB有以下取值B0\text B0B0表示你的答案全部正确与A1\text A1A1配对。B1\text B1B1表示含义如下Wrong Answer. The length of your SM is not right!\text{Wrong Answer.}\texttt{ The length of your SM is not right!}Wrong Answer.The length of your SM is not right!代表你在一组数据中构造的乐谱的长度不为nnn。B2\text B2B2表示含义如下Wrong Answer. Your Ans is not right!\text{Wrong Answer.}\texttt{ Your Ans is not right!}Wrong Answer.Your Ans is not right!代表你在一组数据中xxx的值错误。B3\text B3B3表示含义如下Wrong Answer. Your Ans and SM are not matched!\text{Wrong Answer.}\texttt{ Your Ans and SM are not matched!}Wrong Answer.Your Ans and SM are not matched!代表你在一组数据中构造的乐谱使 Tpes 产生的愤怒值不为xxx。这里Ans, SM\text{Ans, SM}Ans, SM分别表示 Answerxxx的值和 Sheet Music乐谱。注意到Type\tt TypeType只会反映你在该测试点中第一次错误的类型。C实现#includebits/stdc.husingnamespacestd;#defineintlonglongconstintN1e55;chars[N];charname[10]Nahida;/*随机定义一个不含有 XX 的字符串即可*/charsame[10]AC;/*选择两个字符是因为 k3 时这种构造方案会出现 XXXX 的情况改为 XXYY 即可*/intT,n,k,a,b;signedmain(){cinT;while(T--0){intans0,cnt0,m0;cinnkab;s[n1]\0;for(inti1;in;i)s[i](k2ab)?Q:name[(i-1)%6];if(k2){ans(n-1)*min(a,b);gotoprint;}if(a(k-1)*b){ansb*(n-k1);gotoprint;}for(intl1,r;mlk-1,(rmk-2)n;lm)s[m]s[m-1]same[(cnt)1];if(a(n-m1)*b)s[m]s[m-1]same[(cnt)1];elseans(n-m1)*b;print:coutmax(ansa*cnt,0ll)\n(s1)\n;}return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容