【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)
題干:
LLLYYY很喜歡寫暴力模擬貪心思維。某一天在機房,他突然拋給了隊友ppq一
個問題。問題如下:
有一個函數f ():
int f(int x){
? ? int tmp = 0;
? ? while(x != 0){
????tmp += x % 10;
????x /= 10;
? ? }
? ? return tmp;
}
接著LLLYYY給定一個整數 c,要求在c范圍內找兩個整數a和b,使得a + b = c,且f(a) + f(b)的值最大。
輸入描述:
?采用多組輸入方式。
每行輸入一個整數 c (1≤c≤10121≤c≤1012)。
輸出描述:
對于每一個 c,找到一組 a,b ,使 f(a) + f(b)最大 且 a + b = c,輸出這個f(a) + f(b)(0≤a,b≤c0≤a,b≤c)。示例1
輸入
復制
35 10000000000輸出
復制
17 91說明
在第一個樣例中,可以選擇 a = 17,b = 18,這樣得到的f(a) + f(b)值最大為 17。 在第二個樣例中, 可以選擇 a = 5000000001,b = 4999999999.這樣得到的f(a) + f(b)值最大為 91。?
解題報告:
? 直接貪心出最多的9,剩下一個數直接減就行了。
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; int f(ll x) {int res = 0;while(x) {res += x%10;x/=10;}return res; } ll c; int main() {while(~scanf("%lld",&c)) {ll cur = 0;while(1) {if(cur*10 + 9 > c) break;cur =cur*10 + 9 ;}printf("%d\n",f(cur) + f(c-cur));}return 0 ;}題干:
?
因為gugugu非常喜歡9這個數字所以他希望把數字n變得末尾有盡可能多的9,不過他只能把n減小,且減小的數值不超過k,因為gugugu太菜了不會做這個題,所以需要你們幫他解答。
輸入描述:
??
多組數據輸入,第一行輸入一個整數n代表需要變換的數,和一個整數k代表最大能減少的數值。(1?≤?n?≤?1018,0?≤?k?<?n)
提示:OJ的測評機使用%lld輸出64位整型(即long long).若你寫代碼的系統為XP,在XP上運行程序測樣例時要改成%I64d才能正常輸出,但是提交到OJ上的時候必須改回%lld,因為OJ不是xp系統的。
?
輸出描述:
輸出以最大數量的9在末尾且滿足條件的數,如果有多個滿足條件請輸出最大的一個。示例1
輸入
復制
127 30 4521 89輸出
復制
99 4499?
解題報告:
? 因為題目說的很清楚,是末尾要最多的9,也就是中間斷開就不行,所以我們從后往前貪心構造9就行了,注意如果本來就全是9的話那就直接判斷下一位。
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; ll n,k,ans; int main() {while(~scanf("%lld%lld",&n,&k)) {ans = 0;for(ll i = 10; i<=n; i*=10) {ll tmp = n%i;//取前幾位tmp++;if(tmp>k) break;if(tmp == i) continue;ans = tmp;}printf("%lld\n",n - ans);}return 0 ;}總結:
注意這兩個題的構造區別就是了。
總結
以上是生活随笔為你收集整理的【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: profiler.exe - profi
- 下一篇: PRISMSTA.EXE - PRISM