蓝桥2013·带分数
题目链接:https://www.luogu.com.cn/problem/P8599
题意:给定n,求其有多少种带分数表达形式(即a+ b/c = n)(其中a,b,c这些数字在1~9中只出现一次)
思路:
枚举全排列,再枚举i,j,表示0~i范围数字是a,i+1~j范围数字是b,j+1~8范围数字是c
check一下,注意不仅要满足 a+b/c = n,还要满足 b%c = 0,这是因为系统自动向下取整分块
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define pb push_back
#define endl "\n"
#define fi first
#define se second
//#pragma GCC optimize(3)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const ll llmax=LLONG_MAX;
const int maxn=1e5+5;
const int mod=1e9+7;
int n;
int book[]={1,2,3,4,5,6,7,8,9};
int Tonum(int l,int r){
int res=0;
for(int i=l;i<=r;i++){
res=res*10+book[i];
}
return res;
}
bool check(int a,int b,int c){
if(a+(b/c)==n&&b%c==0)return true;
return false;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0);
cin>>n;
int cnt=0;
do{
for(int i=0;i<=8;i++){
for(int j=i+1;j<=7;j++){
int a=Tonum(0,i);
int b=Tonum(i+1,j);
int c=Tonum(j+1,8);
if(check(a,b,c)){
cnt++;
}
}
}
}while(next_permutation(book,book+9));
cout<<cnt;
return 0;
}

浙公网安备 33010602011771号