Codeforces Round #723 (Div. 2) B. I Hate 1111(找规律,性质)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #723 (Div. 2) B. I Hate 1111(找规律,性质)相关的知识,希望对你有一定的参考价值。
人被这题搞傻了
找找规律,发现
1111 = 11 ∗ 101 1111=11*101 1111=11∗101
11111 = 11 ∗ 1 0 3 + 111 11111=11*10^3+111 11111=11∗103+111
111111 = 11 ∗ 1 0 4 + 1111 111111=11*10^4+1111 111111=11∗104+1111
1111111 = 11 ∗ 1 0 5 + 11111 1111111=11*10^5+11111 1111111=11∗105+11111
综上所诉,后面的每个数都可以看成由若干个 11 11 11和 111 111 111加和的值
所以问题转化为求 x = 11 ∗ a + 111 ∗ b x=11*a+111*b x=11∗a+111∗b是否存在正整数解
这个也许可以 e x g c d ? ? \\rm exgcd?? exgcd??我不是很懂,但是可以直接枚举 b b b
枚举 b b b的单次复杂度最坏是 1 0 7 10^7 107次,但是存在结论大于几千的数一定有解
所以完全跑不满,可以暴力枚举 b b b.
但是我们还是严谨一点,优化一下复杂度
注意到 111 = 11 ∗ 10 + 1 111=11*10+1 111=11∗10+1
所以而如果 b > = 11 b>=11 b>=11是没有意义的
因为 111 ∗ 11 = 11 + 11 ∗ 110 111*11=11+11*110 111∗11=11+11∗110
111 ∗ 12 = 11 ∗ 111 + 111 111*12=11*111+111 111∗12=11∗111+111
111 ∗ 13 = 11 ∗ 111 + 111 ∗ 2 111*13=11*111+111*2 111∗13=11∗111+111∗2
…
以此类推,发现是一个循环,所以 b b b只需要枚举到 11 11 11即可
其实这题打表找规律更好,发现大于几千的数都能被凑出来,于是完全背包处理小数据即可
#include <bits/stdc++.h>
using namespace std;
int t,n;
int main()
{
cin >> t;
while( t-- )
{
int flag = 0;
scanf("%d",&n );
for(int i=0;i<=11;i++)
if( i*111<=n && (n-i*111)%11==0 ) flag = 1;
if( flag ) printf("YES\\n");
else printf("NO\\n");
}
}
以上是关于Codeforces Round #723 (Div. 2) B. I Hate 1111(找规律,性质)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #723 (Div. 2)Codeforces-1526ABCD
Codeforces Round #723 (Div. 2)Codeforces-1526ABCD
Codeforces Round #723 (Div. 2)
Codeforces Round #723 (Div. 2), A. Mean Inequality