穿越隧道
AC版
因数据范围很大,依次遍历,按道理大概率会TLE. 类似构造法、逆向思维。 对于一个数字字符串:其数字元素全相同 改变数字字符串的其中一个元素(除前导零),改变后的元素是否在数据范围内,若是,则答案++。 atoll:字符串转为long long
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll x,y;
ll ans;
map<int,int> mp;
bool chk(int s){
mp.clear();
while(s){
mp[s%10] = 1;
s/=10;
}
if(mp.size()==2) return true;
return false;
}
int main(){
cin >> x >> y;
for(int s = 3; s <= 17; s++){
for(int val = 0; val <= 9; val++){
string str(s,'0' + val);
for(int va = 0; va <= 9; va++){
if(val == va) continue;
for(int i = 0; i < s; i++){
str[i] = '0' + va;
ll num = atoll(str.c_str());
if(str[0] != '0' && x <= nu && num <= y) ans++;
str[i] = '0' + val;m
}
}
}
}
cout << ans << endl;
return 0;
}
野生版(WA)
只能过一个样例 目前,不知道为啥是wa,而不是TLE
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s,e;
ll ans;
map<int,int> mp;
bool chk(int s){
mp.clear();
while(s){
mp[s%10] = 1;
s/=10;
}
if(mp.size()==2) return true;
return false;
}
int main(){
cin >> s >> e;
for(ll i = s; i <= e; i++){
ll t = i;
if(chk(t)){
ans++;
}
}
cout << ans << endl;
return 0;
}
|