牛客OI周赛7-提高组(A 小睿睿的等式)
题目描述
小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n/k的等式有多少种(B+A=n与A+B=n看作一种)
注:
“=”与“+”分别需要使用2根火柴棒
输入描述:
一行2个整数n,k,保证n取模k为0
输出描述:
一行一个整数,表示答案
示例1
输入
60 2
输出
4
说明
11+49=60
13+47=60
17+43=60
19+41=60
示例2
输入
100000 1250
输出
3092
备注:
对于30%的数据,0<=n<=100
对于50%的数据,0<=n<=1000000
对于100%的数据,0<=n<=50000000;A,B>=0
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long long int n,k,t,a[10]={6,2,5,5,4,5,6,3,7,6},i,s,s1,cnt=0,x=0,s2,y=0,m=0;
scanf("%lld %lld",&n,&k);
t=n/k-4;
s=n;
while(s>0)
{
x=x+a[s%10];
s=s/10;
y++;
}
s2=x;
x=x+6;
if(x==t)
cnt++;
if(21*y<t)
{
cout<<0<<endl;
}
else
{
for(i=1;i<=n/2;i++)
{
x=0;
s=i;
s1=n-i;
while(s>0)
{
if(x>t)
{
m=1;
break;
}
x=x+a[s%10];
s=s/10;
}
if(m==1)
{
m=0;
continue;
}
if(x>t)
{
continue;
}
while(s1>0)
{
if(x>t)
{
m=1;
break;
}
x=x+a[s1%10];
s1=s1/10;
}
if(m==1)
{
m=0;
continue;
}
if((x+s2)==t)
cnt++;
}
cout<<cnt<<endl;
}
return 0;
}