AtCoder_abc328

发布时间 2023-12-03 13:10:52作者: 某谦

A - Not Too Hard

题目链接

题目大意

给出$N$个数($S_1$ $S_2$...$S_n$)和一个$X$,输出所有小于等于$X$的$S_i$之和

解题思路

循环遍历每一个$S_i$并判断是否大于$X$

代码

// Problem: A - Not Too Hard
// Contest: AtCoder - Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)
// URL: https://atcoder.jp/contests/abc328/tasks/abc328_a
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n,t,x,sum;
int main(){
	cin>>n>>x;
	for(int i=1;i<=n;i++){
		int t;cin>>t;
		if(t<=x)
			sum+=t;
	}
	cout<<sum;
	return 0;
}

B - 11/11

题目链接

题目大意

AtCoder的国王使用一个包含$N$个月的日历,第$i$个月有$D_i$天。有多少天的月和日能用同一个十进制数表示出来?
举个例子:
这里是一些符合要求的日期:1.1 , 1.11 , 2.2 ,11.1
一些不符合要求的日期:1.2 , 4.3 , 10.10(用了1和0两个数) , 12.12(用了1和2两个数)

解题思路

可以通过取余和整除判断月和日每一位都相等

代码

// Problem: B - 11/11
// Contest: AtCoder - Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)
// URL: https://atcoder.jp/contests/abc328/tasks/abc328_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n,ans;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int t;cin>>t;
		if(i<10||i%10==i/10)
			for(int j=1;j<=t;j++){
				int f=1;
				int x=j;
				while(x){
					if(x%10!=i%10){
						f=0;
						break;
					}
					x/=10;
				}
				ans+=f;
			}
	}
	cout<<ans;
	return 0;
}

C - Consecutive

题目链接

题目大意

给出$N,Q$以及一个长度为$N$的字符串$S$,接下来是
$l_1,r_1$
$l_2,r_2$
$\vdots,,,,,,,\vdots$
$l_q,r_q$
要求对于每一组$l_i,r_i(1 \le i \le q)$,输出在有多少个$S_j(l \le j \le r-1)$满足$S_j=S_{j+1}$

解题思路

没错,就是它:前缀和。定义一个前缀和数组$sum,sum_i$表示从$S_1$到$S_i$有多少个满足,$O(N)$初始化$sum$之后$O(Q)$输出就好了

代码

// Problem: C - Consecutive
// Contest: AtCoder - Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328)
// URL: https://atcoder.jp/contests/abc328/tasks/abc328_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms

#include<bits/stdc++.h>
using namespace std;
int n,q;
int sum[300005];
string s;
int main(){
	cin>>n>>q>>s;
	s=" "+s;
	for(int i=1;i<n;i++){
		if(s[i]==s[i+1])
			sum[i]++;
		sum[i]+=sum[i-1];
	}
	for(int i=1;i<=q;i++){
		int l,r;cin>>l>>r;
		cout<<sum[r-1]-sum[l-1]<<endl;
	}
	return 0;
}

D - Take ABC

题目链接
非常好题目,这令我大脑停转!