CSP-X2021T1疯狂的数列

博客给出一个数列整除问题,妖怪让达克计算数列前n项里能被3整除的项数,给出了数据范围,最后展示了用C++实现的AC代码,通过简单计算得出结果。

原题:
​在你的帮助下,达克终于打开了石门,进去后发现里面有个面目狰狞的妖怪。这只妖怪正怒视着轩轩,然后一言不发的在地上写了一串数字:1,12,123,1234,12345,123456,1234567……
然后告诉达克:“你要是能知道这个数列的前n项里有多少项能被
3整除,我就放你过去。

对于30%的数据,满足n<=10。
对于100%的数据,满足n<=2^31-1。
AC:
long long n;
cin>>n;
long long cnt=0;
cnt+=n/3*2;
if(n%3==2) cnt++;
cout<<cnt;

### 关于CSP-S 2021的相关题目及题解 #### 题目概述 CSP-S 2021 是中国计算机学会举办的全国青少年信息学奥林匹克竞赛的一部分,属于提高组的比赛。该赛事考察选手的算法设计能力以及编程实现技巧。以下是部分经典题目及其对应的题解。 --- #### **回文** ##### 简要题意 给定字符串 `s` 和若干次操作,每次操作可以删除某个字符或将某两个相邻字符交换位置。求最少的操作次数使得整个字符串成为回文串[^1]。 ##### 解决方案 此问题可以通过动态规划解决。定义状态 `dp[i][j]` 表示将子串 `s[i..j]` 转化为回文所需的最小操作数。转移方程如下: - 如果 `s[i] == s[j]`,则无需额外操作:`dp[i][j] = dp[i+1][j-1]` - 否则,取两种可能中的较小值:`dp[i][j] = min(dp[i+1][j], dp[i][j-1]) + 1` 最终答案即为 `dp[1][n]`,其中 `n` 是字符串长度。 ```cpp #include <iostream> #include <cstring> using namespace std; const int MAXN = 1005; int dp[MAXN][MAXN]; string s; int main() { cin >> s; memset(dp, 0x3f, sizeof(dp)); int n = s.size(); for (int i = 0; i < n; ++i) dp[i][i] = 0; for (int len = 2; len <= n; ++len) { for (int i = 0; i + len - 1 < n; ++i) { int j = i + len - 1; if (s[i] == s[j]) dp[i][j] = dp[i+1][j-1]; else dp[i][j] = min(dp[i+1][j], dp[i][j-1]) + 1; } } cout << dp[0][n-1] << endl; } ``` --- #### **括号序列** ##### 简要题意 给定一个由左括号 `'('` 和右括号 `')'` 组成的字符串,允许执行有限次翻转操作(即将某些位置上的括号替换为其相反形式),问至少需要多少次翻转才能使整个字符串合法[^4]。 ##### 解决方案 通过维护前缀和的方式记录当前未匹配的左括号数量,并利用贪心策略计算所需翻转次数。具体而言,当遇到无法配对的情况时立即进行一次翻转并更新计数器。 ```cpp #include <bits/stdc++.h> using namespace std; int main(){ string str; cin>>str; long long cnt=0,res=0; for(auto c:str){ if(c=='(')cnt++; else{ if(cnt>0)cnt--; else res++,cnt++; // Flip ')' } } cout<<res+(cnt/2); } ``` --- #### 总结与评价 根据过往参赛者的反馈,本次比赛整体难度适中,适合有一定基础的学生挑战自我[^2]。对于像《回文》这样的高分题,掌握核心概念即可轻松得分;而对于稍复杂的DP类问题,则需多加练习以提升建模能力和代码调试效率。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值