总体情况
感觉这次在起飞。
20 分钟后就在罚坐。
A - aaaadaa
题目描述
给定一个长度为 \(N\) 的字符串 \(S\) ,由小写英文字母以及小写英文字母 \(c_1\) 和 \(c_2\) 组成。
查找将 \(S\) 中所有不属于 \(c_1\) 的字符替换为 \(c_2\) 后得到的字符串。
思路分析
直接模拟。
代码
// Problem: A - aaaadaa
// Contest: AtCoder - Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
// URL: https://atcoder.jp/contests/abc384/tasks/abc384_a
// Memory Limit: 1024 MB
// Time Limit: 2000 ms#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
//#define int long long
namespace gtx{
// Fast IOvoid read(int &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void read(char &x){do{x=getchar();}while(x==' '||x=='\n'||x=='\r');}void write(char x){putchar(x);}void write(int x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(int x,char y){write(x);write(y);}#ifndef intvoid read(long long &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void write(long long x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(long long x,char y){write(x);write(y);}#endifsigned main(){int n;char a,b;string s;cin >> n >> a >> b >> s;for(char i:s){if(i==a) cout << a;else cout <<b;}return 0;}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
// gtx::read(T);while(T--) gtx::main();return 0;
}
B - ARC Division
题目描述
AtCoder 常规竞赛 (ARC) 分为两个部分。
- 在 ARC Div. \(1\) 中,竞赛开始时评分在 \(1600\) 和 \(2799\) 之间(含)的参与者需要更新评分。
- 在 ARC Div. \(2\) 中,竞赛开始时评分在 \(1200\) 和 \(2399\) 之间(含)的参与者需要更新评分。
Takahashi 决定参加 \(N\) ARC。
最初,他的评分为 \(R\) 。
第 \(i\) 个 \((1\leq i\leq N)\) ARC 是 Div. \(D _ i\) ,他在该比赛中的表现用整数 \(A _ i\) 表示。
如果他在第 \(i\) -th ARC 中需要更新评级,则让 \(T\) 成为他在该比赛开始时的评级。然后,比赛结束后,他的评级变为 \(T+A _ i\) 。
如果他不需要更新评级,则他的评级不会改变。
ARC 的评级更新在比赛结束后立即进行,他是否需要在下一场比赛中进行评级更新取决于更新后的评级。
完成 \(N\) ARC 后查找他的评级。
除了这些 \(N\) ARC 之外,他不参加任何比赛,他的评级不会以其他方式发生变化。
思路分析
直接模拟即可。
代码
// Problem: B - ARC Division
// Contest: AtCoder - Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
// URL: https://atcoder.jp/contests/abc384/tasks/abc384_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
namespace gtx{
// Fast IOvoid read(int &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void read(char &x){do{x=getchar();}while(x==' '||x=='\n'||x=='\r');}void write(char x){putchar(x);}void write(int x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(int x,char y){write(x);write(y);}#ifndef intvoid read(long long &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void write(long long x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(long long x,char y){write(x);write(y);}#endifsigned main(){int n,r;cin >>n >> r;for(int i = 1;i<=n;i++){int d,a;cin >> d >>a;if(d==1){if(1600<=r&&r<=2799) r+=a;}else if(d==2){if(1200<=r&&r<=2399) r+=a;}}cout << r;return 0;}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
// gtx::read(T);while(T--) gtx::main();return 0;
}
C - Perfect Standings
题目描述
Takahashi 决定举办一次编程竞赛。
竞赛包含五道题目:A、B、C、D、E,得分分别为 \(a\) 、 \(b\) 、 \(c\) 、 \(d\) 、 \(e\) 。
共有 \(31\) 名参赛者,他们都至少解决了一道题目。
更具体地说,对于字符串 ABCDE
的每个非空子序列(不一定连续),都有一个以该子序列命名的参赛者,他解决了与其名字中字母对应的题目,而没有解决其他题目。
例如,参赛者 A 只解决了题目 A,参赛者 BCE 解决了题目 B、C 和 E。
按得分从大到小的顺序打印参赛者的姓名。参与者获得的分数是他们所解决问题的分数的总和。
如果两个参与者获得的分数相同,则首先打印名字在字典中较小的参与者。
“字典中较小”是什么意思?
简而言之,“字典中较小”是指单词在字典中出现的顺序。
更准确地说,对于由大写英文字母组成的不同字符串 \(S,T\) ,如果满足以下任一条件,则 \(S\) 在字典中小于 \(T\) :
- \(S\) 的长度 \(|S|\) 小于 \(T\) 的长度,并且 \(T\) 的前 \(|S|\) 个字符与 \(S\) 匹配。
- 存在一个整数 \(1\leq i\leq\min\{ |S|,|T|\}\) ,它同时满足以下两个条件:
- 对于每个整数 \(j\) ,其值为 \(1\leq j\lt i\) , \(S\) 的第 \(j\) 个字符等于 \(T\) 的第 \(j\) 个字符。
- \(S\) 的第 \(i\) 个字符按字母顺序小于 \(T\) 的第 \(i\) 个字符。
例如,如果 \(S=\) AB
和 \(T=\) ABC
,则第一个条件成立,因此 \(S\) 按字典顺序小于 \(T\) 。如果 \(S=\) ABD
且 \(T=\) ACD
,则第二个条件对 \(i=2\) 成立,因此 \(S\) 按字典顺序小于 \(T\) 。
思路分析
暴力搜索,然后放入一个 pair<int,string>
排序就行。
代码
// Problem: C - Perfect Standings
// Contest: AtCoder - Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
// URL: https://atcoder.jp/contests/abc384/tasks/abc384_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
namespace gtx{
// Fast IOvoid read(int &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void read(char &x){do{x=getchar();}while(x==' '||x=='\n'||x=='\r');}void write(char x){putchar(x);}void write(int x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(int x,char y){write(x);write(y);}#ifndef intvoid read(long long &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void write(long long x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(long long x,char y){write(x);write(y);}#endifvector<pair<int,string>> v;string now;int a[6];void dfs(char tmp,int s){if(tmp=='F'){if(now=="") return;v.push_back({-s,now});return;}dfs(tmp+1,s);now+=tmp;s+=a[tmp-'A'];dfs(tmp+1,s);now.erase(--now.end());s-=a[tmp-'A'];}signed main(){cin >>a[0] >>a[1 ] >> a[2] >> a[3] >> a[4];dfs('A',0);sort(v.begin(),v.end());for(auto i:v) cout << i.second <<endl;return 0;}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
// gtx::read(T);while(T--) gtx::main();return 0;
}
D - Repeated Sequence
题目描述
给定一个无限序列 \(A=(A _ 1,A _ 2,A _ 3,\dotsc)\) ,其周期为 \(N\) ,前 \(N\) 项 \(A _ 1,A _ 2,\dotsc,A _ N\) 。
确定此无限序列是否存在一个非空的连续子序列,其和为 \(S\) 。
这里,当对每个整数 \(i > N\) 都有 \(A _ i=A _ {i-N}\) 时,无限序列 \(A\) 的周期为 \(N\) 。
思路分析
首先对总和取模。
否则直接枚举区间,发现具有单调性,直接双指针。
代码
// Problem: D - Repeated Sequence
// Contest: AtCoder - Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
// URL: https://atcoder.jp/contests/abc384/tasks/abc384_d
// Memory Limit: 1024 MB
// Time Limit: 2000 ms#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
namespace gtx{
// Fast IOvoid read(int &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void read(char &x){do{x=getchar();}while(x==' '||x=='\n'||x=='\r');}void write(char x){putchar(x);}void write(int x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(int x,char y){write(x);write(y);}#ifndef intvoid read(long long &x){x = 0;int h = 1;char tmp;do{tmp=getchar();if(tmp=='-')h*=-1;}while(!isdigit(tmp));while(isdigit(tmp)) x*=10,x+=tmp-'0',tmp=getchar();x*=h;}void write(long long x){if(x<0) putchar('-'),x=-x;int st[200]={0},tot=0;do{st[++tot]=x%10,x/=10;} while(x);while(tot){putchar(st[tot--]+'0');}}void write(long long x,char y){write(x);write(y);}#endifconst int MAXN = 4e5+10;int n,s,a[MAXN],p,sum[MAXN];signed main(){read(n);read(s);for(int i = 1;i<=n;i++) read(a[i]),p+=a[i],sum[i] = sum[i-1]+a[i];for(int i = n+1;i<=2*n;i++) a[i] = a[i-n],sum[i] = sum[i-1]+a[i];s%=p;if(s==0) return puts("Yes");int l = 1,r = 1;while(l<=2*n){while(sum[r]-sum[l-1]<s&&r<=2*n) r++;if(sum[r]-sum[l-1]==s) return puts("Yes");l++;}puts("No");return 0;}
}
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
// ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int T = 1;
// gtx::read(T);while(T--) gtx::main();return 0;
}