ZOJ 4070 Function and Function
这题卡输入输出,不能用 cin 和 cout。
Function and Function
Time Limit: 1 Second Memory Limit: 65536 KB
If we define , do you know what function means?
Actually, calculates the total number of enclosed areas produced by each digit in . The following table shows the number of enclosed areas produced by each digit:
Enclosed Area Digit Enclosed Area Digit 0 1 5 0 1 0 6 1 2 0 7 0 3 0 8 2 4 1 9 1 For example, , and .
We now define a recursive function by the following equations:
For example, , and .
Given two integers and , please calculate the value of .
Input
There are multiple test cases. The first line of the input contains an integer (about ), indicating the number of test cases. For each test case:
The first and only line contains two integers and ( ). Positive integers are given without leading zeros, and zero is given with exactly one '0'.
Output
For each test case output one line containing one integer, indicating the value of .
Sample Input
6 123456789 1 888888888 1 888888888 2 888888888 999999999 98640 12345 1000000000 0Sample Output
5 18 2 0 0 1000000000Hint
Author: WENG, Caizhi
Source: The 2018 ACM-ICPC Asia Qingdao Regional Contest
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
int main()
{
LL a[] = {1,0,0,0,1,0,1,0,2,1};
LL n,m,j,k,i,T;
scanf("%lld",&T);
for (j=0;j<T;j++)
{
scanf("%lld%lld",&n,&m);
if (m==0)
{
printf("%lld\n",n);
continue;
}
LL sum=0,x=0,flag = -1;
for (i=0;i<m;i++)
{
if (n == 0)
{
flag = 0;
break;
}
if (n == 1)
{
flag = 1;
break;
}
sum=0;
while (n)
{
sum = sum + (a[n%10]);
n/=10;
}
n = sum;
//cout<<"n = "<<n<<endl;
}
if (flag == 1)
{
if ( ( (m-1) - i) % 2 == 0 )
printf("0\n");
else
printf("1\n");
}
else if (flag == 0)
{
if ( ( (m-1) - i) % 2 == 0 )
printf("1\n");
else
printf("0\n");
}
else
printf("%lld\n",sum);
}
return 0;
}