主页
搜索
最近更新
数据统计
申请密钥
系统公告
1
/
1
请查看完所有公告
题解:B4206 [常州市赛 2021] 数字翻转
最后更新于 2025-07-31 12:51:44
作者
xieyaowei132132
分类
题解
题解
B4206
复制 Markdown
查看原文
删除文章
更新内容
# B4206[常州市赛2021]数字翻转题解 这是本蒟蒻第一篇题解,求管理员通过; ~~我是看这题可以写题解才来做的~~ 原本我只是想用暴力~~水~~一下,没想到  我立刻觉得这是一个好~~骗~~的方向,便去修改我的代码; 根据题目所说的,$0$,$2$,$5$,$8$反转后是等于它本身,而6反转后为$9$,$9$反转后为$6$。 很明显,只要数组中出现其他数字的话,反转后一定不等于它本身,所以只要判断数字中是否有$0$,$2$,$5$,$6$,$8$,$9$以外的数,就可以排除一堆了。最后在判断反转后是否等于本身就好了。 有点令我蒙的是,修改后的代码全是TLE。 看了一眼题目的数据范围 果然,数组不能开太小,改完数组,我就成功的~~骗~~过了 ~~代码我就不给注释了~~ # 完整代码 ```cpp #include<bits/stdc++.h>//万能头 using namespace std; const int MAX=10000000;//开大点不然会完蛋 int cnt[MAX+5]; int main() { for(int i=1;i<=MAX;++i)//这就是预处理 { int m=i; int rev=0; int base=1; bool bad=0; int tmp=i; while(m) { int y=m%10; m/=10; if(y==1||y==3||y==4||y==7){bad=1;break;} int ny; if(y==0||y==2||y==5||y==8) ny=y; else if(y==6) ny=9; else if(y==9) ny=6; rev=rev*10+ny; base=0; } if(!bad&&rev==tmp) cnt[i]=1; } for(int i=1;i<=MAX;++i) cnt[i]+=cnt[i-1];//用了前缀和不介意吧? ios::sync_with_stdio(false); cin.tie(nullptr);//防止超时的东东 int a; cin>>a; while(a--) { int l,r; cin>>l>>r; cout<<cnt[r]-cnt[l-1]<<endl; } return 0; } ``` 求管理员通过啊
正在渲染内容...
点赞
1
收藏
1