7 条题解
-
3
#include <bits/stdc++.h> using namespace std; long long n,l,r,a[1000005]; int s1(int x) { int sum=0; while(x>0) { if(x%10==1) { sum++; } x/=10; } return sum; } int main() { a[1]=1; for(int i=2;i<=1000000;i++) { a[i]=a[i-1]+s1(i); } cin >>n; for(int q=1;q<=n;q++) { cin>>l>>r; cout <<a[r]-a[l-1]<<endl; } }
-
1
纯粹前缀和的题
总耗时1066ms
峰值内存18.5 MiBconst int maxn=1e6+1; // 数据上限 int n,l,r,sum[maxn],x,cnt; ios::sync_with_stdio(false); // 输入输出加速 cin.tie(0); cout.tie(0); for(int i=1;i<=maxn;i++){ // 用前缀和打表 x=i; // 计算第i个数有几个1 cnt=0; // 记录 while(x>0){ // 计算每一位 if(x%10==1)cnt++; // 每当遇到1则cnt+1 x/=10; // 去除个位 } sum[i]=sum[i-1]+cnt; // 计算前缀和 } for(int i=1;i<=n;i++){ cin>>l>>r; cout<<sum[r]-sum[l-1]<<"\n"; // 直接通过前缀和计算答案。杜绝TLE,从你我做起=) }
兄弟,别想着直接搬运了,该写的地方还是得自己写的()
我保证你直接搬运直接CE/doge -
-1
这题使用前缀和。
我们定义一个函数count1计算一个数里有多少个1,先用sum[i]记录1~i中有多少个1,再在输入时直接输出即可。
unAC code
int count1(int n) { int sum=0; while(n>0) { if(n%10==1) { sum++; } n/=10; } return sum; }
。
。
。
。
int main() { for(int i=1;i<=1000000;i++) { sum[i]=sum[i-1]+count1(i); } cin>>n; while(n--) { cin>>l>>r; cout<<sum[r]-sum[l-1]<<endl; } return 1145141919810; }
复制CE,拿走不谢~
-
-10
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1210
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 735
- 已通过
- 220
- 上传者