1. 程式人生 > >【洛谷】P1012 拼數(貪心)

【洛谷】P1012 拼數(貪心)

題目連結

題目描述

設有 n 個正整數 (n≤20)將它們聯接成一排,組成一個最大的多位整數。

例如: n=3 時, 3 個整數 13 , 312 , 343 聯接成的最大整數為: 34331213

又如: n=4 時, 4 個整數 7 , 13 , 44 , 246 聯接成的最大整數為: 7424613

輸入輸出格式

輸入格式:

第一行,一個正整數 n 。

第二行, n 個正整數。

輸出格式:

一個正整數,表示最大的整數

輸入輸出樣例

輸入樣例#1: 複製

3
13 312 343

輸出樣例#1: 複製

34331213

用到了貪心的思想。先排序再連線。注意不能直接按字典序大小比較。比如874和87,874的字典序比87的字典序大,但顯然87應該排在874的前面,因為87874比87487大。

AC程式碼:

#include<iostream>
#include<sstream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<vector>
#include<cmath>
#include<stack>
using namespace std;
bool com(string a,string b)//a是否應該排在b的前面 
{
	if(a.length()<b.length()&&b.find(a,0)==0)
            return b[a.length()]<b[0];
	
	else if(a.length()>b.length()&&a.find(b,0)==0)
	    return a[b.length()]>a[0];
	    
	else return a>b;
}
int main()
{
	int n;
	string num[21];
	cin>>n;
	for(int i=1;i<=n;i++) cin>>num[i];
	
	sort(num+1,num+n+1,com); 
	
	string ans;
	for(int i=1;i<=n;i++) 
	ans+=num[i];
	cout<<ans;
}

後來發現一種超級nb的寫法,%%%%

#include<iostream>
#include<sstream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<vector>
#include<cmath>
#include<stack>
using namespace std;
bool com(string a,string b)//a是否應該排在b的前面 
{
	return a+b>b+a; 
}
int main()
{
	int n;
	string num[21];
	cin>>n;
	for(int i=1;i<=n;i++) cin>>num[i];
	
	sort(num+1,num+n+1,com); 
	
	string ans;
	for(int i=1;i<=n;i++) 
	ans+=num[i];
	cout<<ans;
}

相關推薦

P1012 貪心

題目連結 題目描述 設有 n 個正整數 (n≤20)將它們聯接成一排,組成一個最大的多位整數。 例如: n=3 時, 3 個整數 13 , 312 , 343 聯接成的最大整數為: 34331213 又如: n=4 時, 4 個整數 7 , 13 , 44 , 246

P2434 [SDOI2005]區間暴力

輸入輸出 pre spa scan break 輸入格式 我們 return 描述 題目描述 現給定n個閉區間[ai, bi],1<=i<=n。這些區間的並可以表示為一些不相交的閉區間的並。你的任務就是在這些表示方式中找出包含最少區間的方案。你的輸出應該按照區

P2725 郵票 Stampsdp

adg symbol 能夠 循環 tro 總數 技術分享 std 答案 題目背景 給一組 N 枚郵票的面值集合(如,{1 分,3 分})和一個上限 K —— 表示信封上能夠貼 K 張郵票。計算從 1 到 M 的最大連續可貼出的郵資。 題目描述

P5015 標題統計java

題目描述 凱凱剛寫了一篇美妙的作文,請問這篇作文的標題中有多少個字元? 注意:標題中可能包含大、小寫英文字母、數字字元、空格和換行符。統計標題字 符數時,空格和換行符不計算在內。 輸入輸出格式 輸入格式:   輸入檔案只有一行,一個字串 ss。  

P1052 過河狀壓dp

ron mic ont 由於 不同 amp 整數 輸入輸出格式 pac 題目描述 在河上有一座獨木橋,一只青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數

P1036 選

洛谷P1036  選數 題目描述: 已知 n 個整數 x1,x2,…,xn,以及一個整數 k(k<n)。從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n=4,k=3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為: 3+7+12=22 3+7+19

Unity技巧四元Quaternion和旋轉

四元數介紹旋轉,應該是三種座標變換——縮放、旋轉和平移,中最複雜的一種了。大家應該都聽過,有一種旋轉的表示方法叫四元數。按照我們的習慣,我們更加熟悉的是另外兩種旋轉的表示方法——矩陣旋轉和尤拉旋轉。矩陣

4404 [JSOI2010]快取交換貪心優先佇列

題目 在計算機中,CPU只能和快取記憶體Cache直接交換資料。當所需的記憶體單元不在Cache中時,則需要從主存裡把資料調入Cache。此時,如果Cache容量已滿,則必須先從中刪除一個。 例如,當前Cache容量為3,且已經有編號為10和20的主存單元。 此時,CPU訪問編號為10的主存

CodeForces - 140CNew Year Snowmen 貪心

題幹: As meticulous Gerald sets the table and caring Alexander sends the postcards, Sergey makes snowmen. Each showman should consist of three snowb

P1056:排座椅貪心

https://www.luogu.org/problemnew/show/P1056 輸入輸出樣例 輸入樣例#1: 複製 4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4 輸出樣例#1: 複製 2 2 4 說明 上圖中用符號*

P1012string相加小技巧

color font col 整數 比較 DC with 然而 cin 題目描述 設有n個正整數(n≤20),將它們聯接成一排,組成一個最大的多位整數。 例如:n=3時,3個整數13,312,343聯接成的最大整數為:34331213 又如:n=4時,4個整數7,13,4,

第二題統計單詞 P1308

題目描述 一般的文字編輯器都有查詢單詞的功能,該功能可以快速定位特定單詞在文章中的位置,有的還能統計出特定單詞在文章中出現的次數。 現在,請你程式設計實現這一功能,具體要求是:給定一個單詞,請你輸出它在給定的文章中出現的次數和第一次出現的位置。注意:匹配單詞時,

2822 組合數問題遞推

return bottom 初始化 list main sca set 如果 lld 題目描述 組合數C?n?m??表示的是從n個物品中選出m個物品的方案數。舉個例子,從(1,2,3) 三個物品中選擇兩個物品可以有(1,2),(1,3),(2,3)這三種選擇方法。根據組合

P2983 [USACO10FEB]購買巧克力Chocolate Buying貪心

輸出格式 準備 anti radius rod money pri price -s 題目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Choco

P1019 單詞接龍-預處理+dfs

題目描述 單詞接龍是一個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定一個開頭的字母,要求出以這個字母開頭的最長的“龍”(每個單詞都最多在“龍”中出現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成

第一題數字統計P1179

題目大意 給兩個整數L,R(1<=L,R<=1000000),求出數字2在此區間出現過幾次 分析 資料不大,模擬AC #include<bits/stdc++.h> using namespace std; int main() { i

第二題接水問題 P1190

題目描述 學校裡有一個水房,水房裡一共裝有 m 個龍頭可供同學們開啟水,每個龍頭每秒鐘的供水量相等,均為 1。 現在有 n 名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從 1 到 n 編號,i號同學的接水量為 wi。接水開始時,1 到 m 號

第四題表示式的值 P1310

題目描述 對於1 位二進位制變數定義兩種運算: 運算的優先順序是: 先計算括號內的,再計算括號外的。 “× ”運算優先於“⊕”運算,即計算表示式時,先計算× 運算,再計算⊕運算。例如:計算表示式A⊕B × C時,先計算 B × C,其結果再與 A 做⊕運算。

題解1600天天愛跑步NOIP2016

在這裡給大家提供一種非常簡單的方法。 我們先來轉化一下題面:題目要求我們求每一個點在某個時間能看到的人數,那我們也可以分別計算每一個人對於他跑步的那條路徑上的貢獻。 那麼我們可以發現一個顯而易見的事情:這條路經一定由一段上行和一段下行組成。而且有且只有這兩條路徑

P1004 方格取

#include<bits/stdc++.h> using namespace std; int n,jz[12][12],v[12][12][12][12],a,b,c; int mx(i