AtCoder_abc328

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

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

posted @ 2023-12-03 12:16  某谦  阅读(31)  评论(0编辑  收藏  举报