日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【牛客 - 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(贪心构造)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。