列表

详情


NC22835. 小睿睿的等式

描述

小睿睿在游戏开始时有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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 270ms, 内存消耗: 196308K, 提交时间: 2019-03-25 22:24:54

#include<iostream>
using namespace std;
int b[10]={6,2,5,5,4,5,6,3,7,6},a[50000001];
int main()
{
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	a[i]=a[i/10]+b[i%10];
	int m=n/k-4-a[n],ans=0;
	for(int i=0,j=n;i<=j;i++,j--)
	{
		if(a[i]+a[j]==m)
		{
			ans++;
		}
	}
	cout<<ans<<endl;
}

C++11(clang++ 3.9) 解法, 执行用时: 246ms, 内存消耗: 196068K, 提交时间: 2020-02-27 12:22:57

#include<bits/stdc++.h>
using namespace std;
int n,m,c[50000005],ans,j,i,p[10]={6,2,5,5,4,5,6,3,7,6};
int main()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	c[i]=c[i/10]+p[i%10];
	m=n/m-4-c[n];
	for(i=1,j=n-1;i<=j;i++,j--)
	ans+=c[i]+c[j]==m;
	printf("%d\n",ans);
	return 0;
}

上一题