1 条题解
-
0
自动搬运
来自洛谷,原作者为

未来姚班zyl
欢迎加入粉丝团!https://www.luogu.com.cn/team/72518|AFO搬运于
2025-08-24 21:16:48,当前版本为作者最后更新于2024-11-18 15:20:27,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
考察数位的提取、子函数的定义、数组、循环结构,对后三者的考察较为灵活。
首先枚举 ,然后判断 是否合法。
然后先提取 的六个数位,只需不断 ,取 就可以,先用一个大小为 的数组 存下它们。
由于只用分成两组数,只需要枚举 使得 分成一组即可,剩下三个数正好分成另一组。
接下来是判断三个数能否组成三角形,根据小学知识,设三个数从小到大分别为 ,则只需 即可。
然后就 OK 了,可以发现我们没必要特判某个数位为 ,因为只要有 在就不可能组成三角形,核心代码如下:
bool check(int a,int b,int c){ int A=min({a,b,c}),C=max({a,b,c}),B=a+b+c-A-C; return A+B>C; } int a[7],b[4]; bool Check(int x){ for(int i=1;i<=6;i++)a[i]=x%10,x/=10; for(int i=2;i<=6;i++)for(int j=i+1;j<=6;j++)if(check(a[1],a[i],a[j])){ int n=0; for(int k=2;k<=6;k++)if(k!=i&&k!=j)b[++n]=a[k]; if(check(b[1],b[2],b[3]))return 1; } return 0; } int main(){ int l,r,ans=0; cin>>l>>r; for(int i=l;i<=r;i++)if(Check(i))ans++; cout<<ans; return 0; }
- 1
信息
- ID
- 10842
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者