a幸運數字
ⅰ 時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 262144k,其他語言524288k
64bit io format: %lld
定義乙個數字為幸運數字當且僅當它的所有數字都是4或者7。
比如說,47、744、4都是幸運數字而5、17、467都不是。
現在,給定乙個字串s,請求出乙個字串,使得:
1、它所代表的整數是乙個幸運數字;
2、它非空;
3、它作為s的子串(不是子串行)出現了最多的次數(不能為0次)。
請求出這個串(如果有多解,請輸出字典序最小的那乙個)。
串s(1 <= |s| <= 50)。s只包含數字字元,可以有前導零。
乙個串表示答案。示例1無解輸出-1。
047
4
示例2
16
-1
/*
思路:記錄下字串中4和7的個數,如果不存在則輸出-1
哪個個數多輸出哪個,個數相同則輸出4
*/#include #include #include #include #include #include #include #include #include #include #include using namespace std;
int main(void)
b
幸運數字ⅱ
時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 262144k,其他語言524288k
64bit io format: %lld
定義乙個數字為幸運數字當且僅當它的所有數字都是4或者7。
比如說,47、744、4都是幸運數字而5、17、467都不是。
定義next(x)為大於等於x的第乙個幸運數字。給定l,r,請求出next(l) + next(l + 1) + ... + next(r - 1) + next(r)。
兩個整數l和r (1 <= l <= r <= 1000,000,000)。
乙個數字表示答案。示例1
2 7
33
示例2
7 7
7
/*
思路:把符合條件的數都存入陣列中,發現不超過1100個,數目很小
給定l,r,請求出next(l) + next(l + 1) + ... + next(r - 1) + next(r)。
這種特徵的求法很容易想到sum(r)-sum(l-1)
sum的細節該如何處理呢?
1 2 3 4 5 6 7
4 4 4 4 7 7 7
可以發現以下特點:
if(num[i]<=n)
res+=(num[i]-num[i-1])*num[i];
else
*/#include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int maxn = 1e5;
typedef long long ll;
ll num[1100]=;
ll cnt=1;
priority_queue ,greater> q;
void work()
}ll work(ll n)
break;
}if((i+2<=n)&&(i%2==1)&&s[i]=='4'&&s[i+1]=='4'&&s[i+2]=='7')
break;
}if(s[i]=='4'&&s[i+1]=='7')
else if(i%2==0)
break;}}
}}
for(int i=1;i<=n;i++)
printf("%c",s[i]);
puts("");
return 0;
}
牛客練習賽13 幸運數字
定義乙個數字為幸運數字當且僅當它的所有數字都是4或者7。比如說,47 744 4都是幸運數字而5 17 467都不是。假設現在有乙個數字d,現在想在d上重複k次操作。假設d有n位,用d1,d2,dn表示。對於每次操作,我們想要找到最小的x x n 使得dx 4並且dx 1 7。如果x為奇數,那麼我們...
牛客練習賽13 幸運數字
定義乙個數字為幸運數字當且僅當它的所有數字都是4或者7。比如說,47 744 4都是幸運數字而5 17 467都不是。定義next x 為大於等於x的第乙個幸運數字。給定l,r,請求出next l next l 1 next r 1 next r 兩個整數l和r 1 l r 1000,000,000...
牛客練習賽13 A 幸運數字I
定義乙個數字為幸運數字當且僅當它的所有數字都是4或者7。比如說,47 744 4都是幸運數字而5 17 467都不是。現在,給定乙個字串s,請求出乙個字串,使得 1 它所代表的整數是乙個幸運數字 2 它非空 3 它作為s的子串 不是子串行 出現了最多的次數 不能為0次 請求出這個串 如果有多解,請輸...