Olympiad
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 347 Accepted Submission(s): 257
For each test case, there are two numbers a and b, as described in the statement. It is guaranteed that 1≤a≤b≤100000.
本題就是關於判定一個數中是否包含有有重複的數字並求出一個區間內滿足條件 的書的個數;
暴搜超時,每一個區間都算一遍浪費時間,直接先算出每一個數字之前滿足條件的數字個數即可,打表法
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int temp[10];
int ans[100001];
int i,j,n,a,b;
int fun1(int x)//用於判斷數字是否滿足條件
{
int mod;
memset(temp,0,sizeof(temp));
while(x != 0)
{
mod = x % 10;
if(temp[mod])
{
return 0;
}
else
{
temp[mod]++;
}
x /= 10;
}
return 1;
}
int main()
{
//結果打表
for(i = 1;i < 100001;i++)
{
if(fun1(i))
{
ans[i] = ans[i-1] + 1;
}
else
{
ans[i] = ans[i-1];
}
}
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d%d",&a,&b);
printf("%d\n",ans[b] - ans[a] + fun1(a));//區間相減即可
}
return 0;
}