2018美團CodeM編程大賽 Round A Problem 2 下棋 【貪心】

應該一眼看出來是貪心題,然后想最優解是什么。正確的貪心策略是【原棋盤上每個位置的棋子】都往最近的左邊【目標棋盤上棋子】移動,如果左邊沒有棋子了那就閑置最后處理,如果目標棋盤在該位置上也有棋子,那就算距離為0(最近)。最后處理的話,棋盤上的局面應該是所有的棋子都得往右移,這樣的話怎么移都無所謂了,樸素的把放過去。

模擬的時候難度在于通過upper bound找到離該位置最近左的位置,所以復雜度是O(NlogN);如果樸素的遍歷數組找最近左需要N復雜度,整體n^2就過不了了。

?

?對于upper_bound來說,返回的是被查序列中第一個大于查找值的指針,也就是返回指向被查值>查找值的最小指針,lower_bound則是返回的是被查序列中第一個大于等于查找值的指針,也就是返回指向被查值>=查找值的最小指針。 【引用自 https://blog.csdn.net/u011008379/article/details/50725670 】

?

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<map>
 4 #include<vector>
 5 using namespace std;
 6 
 7 int board[100005];
 8 vector<int> va;
 9 map<int,int> m;
10 long long ans;
11 //貪心策略
12 //每個都向自己最近的左邊的棋子移動
13 int main(){
14     int n; cin>>n;
15     for(int i=1;i<=n;i++) cin>>board[i];
16     for(int i=1;i<=n;i++){
17         int x; cin>>x;
18         if(x){//這個位置上有棋子
19             va.push_back(i);
20             m[i]=x;
21         }
22     }
23     
24     for(int i=1;i<=n;i++){
25         while(1){
26             vector<int>::iterator index = upper_bound(va.begin(),va.end(),i);/* index指向第一個大于i的元素 */
27             //如果沒有比i還大的,返回begin()
28             if(index==va.begin()) break;//目標盤左邊沒有棋子了 
29             index--; 
30             if( m[ *index ]>board[i] ) {
31                 ans+=(i-(*index) )*board[i];
32                 m[*index]-=board[i];
33                 board[i]=0;
34                 break;
35             }
36             if( m[ *index ]==board[i] ){
37                 ans+=(i-(*index))*board[i];
38                 va.erase(index);
39                 board[i]=0;
40                 break;
41             }
42             if( m[ *index]<board[i]){
43                 ans+=(i-(*index))*m[ *index];
44                 va.erase(index);
45                 board[i]-=m[*index];
46             }
47         }
48     }
49     
50     for(int i=1;i<=n;i++){
51         if(board[i]==0) continue;
52         while(1){
53             if( m[ va[0] ]>board[i] ) {
54                 ans+=(i+va[0]-2)*board[i];
55                 m[ va[0] ]-=board[i];
56                 break;
57             }
58             if( m[ va[0] ]== board[i] ){
59                 ans+=(i+va[0]-2)*board[i];
60                 va.erase(va.begin());
61                 break;
62             }
63             if( m[ va[0] ]<board[i]){
64                 ans+=(i+va[0]-2)*m[ va[0] ];
65                 va.erase(va.begin());
66                 board[i]-=m[ va[0] ];
67             }
68         }
69     }
70     
71     cout<<ans<<endl;
72     
73     return 0;
74 }

沒有提交在美團的oj上,但自己編了幾個數據都過了。

轉載于:https://www.cnblogs.com/ZhenghangHu/p/9162910.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397720.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea清理svn信息_IntelliJ IDEA SVN的賬號修改 信息清除

來到編譯器的setting設置 搜索subversion 點擊subversion 找到下面的clear auth...按鈕,點擊一下 就可以了…如果我們不小心輸入svn賬號錯誤的話,后面就一直提示認證失敗,不能checkout代碼. 這個是因為svn把你輸入的賬號進行了緩存. 如果我們想重新輸入新的賬號,必須要清除緩存…

同步手繪板——json

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基于ECMAScript的一個子集。 JSON采用完全獨立于語言的文本格式&#xff0c;但是也使用了類似于C語言家族的習慣&#xff08;包括C、C、C#、Java、JavaScript、Perl、Python等&#xff09;。這些特性使JSON成為…

[HNOI2008]玩具裝箱TOY

洛谷題目連接:[HNOI2008]玩具裝箱TOY 題目描述 P教授要去看奧運&#xff0c;但是他舍不下他的玩具&#xff0c;于是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓縮&#xff0c;其可以將任意物品變成一堆&#xff0c;再放到一種特殊的一維容器中。P教授有編號為1...N的…

C語言-結構體內存對齊

C語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎&#xff0c;但一不小心就會弄錯。寫出一個struct&#xff0c;然后sizeof&#xff0c;你會不會經常對結果感到奇怪&#xff1f;sizeof的結果往往都比你聲明的變量總長度要大&#xff0c;這是怎么回…

nginx 二進制包安裝mysql_二進制安裝mysql5.7

下載地址&#xff1a;https://downloads.mysql.com/archives/community/[rootlocalhost soft]# lsmysql-5.7.17-linux-glibc2.5-x86_64.tar.gz nginx-1.12.2 nginx-1.12.2.tar.gz[rootlocalhost soft]#1.詳細描安裝的過程1.1關閉防火墻systemctl stop firewalld.service #停止f…

.NET 類型(Types)的那些事

引言 您是.Net工程師&#xff1f;那 .NetFramework中的類型您知道有三大類嗎&#xff1f;&#xff08;除了引用類型和值類型&#xff0c;還有&#xff1f;&#xff09; 引用類型一定在“堆”上&#xff0c;值類型一定在“棧”上&#xff1f; 那引用類型在內存中的布局細節您又知…

幾種去除數組中重復元素的方法、數組去重

工作中遇到的一個問題&#xff0c;就是去除數組中重復的元素&#xff0c;記錄一下幾種有效的方法&#xff1a; 第一種思路&#xff1a;遍歷要刪除的數組arr, 把元素分別放入另一個數組tmp中&#xff0c;在判斷該元素在arr中不存在才允許放入tmp中。 <!DOCTYPE html> <…

MongoDB學習使用

一、什么是MongoDB&#xff1f; MongoDB是一個高性能&#xff0c;開源&#xff0c;無模式的文檔型數據庫&#xff0c;是當前NoSql數據庫中比較熱門的一種。它在許多場景下可用于替代傳統的關系型數據庫或鍵/值存儲方式&#xff0c; NoSql&#xff0c;全稱是 Not Only Sql,指的是…

域賬號更改密碼之后代理需要重新配置

在使用域賬號的時候&#xff0c;如果需要配置賬戶和密碼&#xff0c;那么最好記錄下來&#xff0c;否則將來找不到就很尷尬了。 我遇到的問題是&#xff0c;因為在另外一臺電腦配置了域賬號&#xff0c;用來聯網&#xff0c;提供網絡給visual studio 1.Firefox 這個代理的賬號…

wcf精通1-15

隨筆- 197 文章- 0 評論- 3407 十五天精通WCF——第一天 三種Binding讓你KO80%的業務 轉眼wcf技術已經出現很多年了&#xff0c;也在.net界混的風生水起&#xff0c;同時.net也是一個高度封裝的框架&#xff0c;作為在wcf食物鏈最頂端的我們所能做的任務已經簡單的不能再簡單…

python如何實現共享報表系統_使用python來實現報表自動化-阿里云開發者社區

xlwt 常用功能xlrd 常用功能xlutils 常用功能xlwt寫Excel時公式的應用xlwt寫入特定目錄(路徑設置)xlwt Python語言中&#xff0c;寫入Excel文件的擴展工具。可以實現指定表單、指定單元格的寫入。支持excel03版到excel2013版。使用時請確保已經安裝python環境。百度百科xlrd Py…

去除inline-block元素間間距的N種方法

這篇文章發布于 2012年04月24日&#xff0c;星期二&#xff0c;22:38&#xff0c;歸類于 css相關。 閱讀 147771 次, 今日 52 次 by zhangxinxu from http://www.zhangxinxu.com 本文地址&#xff1a;http://www.zhangxinxu.com/wordpress/?p2357 一、現象描述 真正意義上的in…

Docker深入淺出2

Docker系統架構 Docker使用客戶端-服務端&#xff08;c/s&#xff09;架構模式&#xff0c;使用遠程api來管理和創建Docker容器。 docker容器通過Docker鏡像來創建。 容器與鏡像的關系類似于面向對象編程中的對象與類的關系 Docker面向對象容器對象鏡像類加速器配置&#xff1a…

mysql安裝包下載密碼_MySQL解壓包的安裝與下載的圖文教程

這篇文章主要為大家詳細介紹了mysql解壓包的安裝基礎教程&#xff0c;具有一定的參考價值&#xff0c;感興趣的小伙伴們可以參考一下由于換了新電腦&#xff0c;所以的環境都要到新電腦去配置。突然發現mysql的配置忘了&#xff0c;然后百度又重新來一遍。特地寫一篇文章記錄一…

php 扒取網頁數據

扒取方法 public function index(){$url http://www.dytt8.net/;// $url Public/txt/movies.txt;$content file_get_contents($url);$content iconv("gb2312", "utf-8//IGNORE",$content);$reg "|<div class\"co_content2\">(.*…

多維DP UVA 11552 Fewest Flop

題目傳送門 1 /*2 題意&#xff1a;將子符串分成k組&#xff0c;每組的字符順序任意&#xff0c;問改變后的字符串最少有多少塊3 三維DP&#xff1a;可以知道&#xff0c;每一組的最少塊是確定的&#xff0c;問題就在于組與組之間可能會合并塊&#xff0c;總塊數會-1。…

多表聯合查詢

關聯數據庫字典表的多表聯合查詢 inner join…on 自動連接 需要用到表的所有信息時&#xff0c;可以用以下兩種方法 1) left join…on… 左連接 &#xff08;以左為準&#xff0c;右邊沒有NULL代替&#xff09; 2) right join…on… 右連接&#xff08;以右為準&#xff…

python elasticsearch update_使用python的elasticsearch部分更新

我有以下格式的elasticsearch文檔。我需要部分更新“x”字段并在其中添加python dict。{"_index": "gdata34","_type": "gdat","_id": "328091-72341-118","_version": 1,"_score": 1,"…

32位與64位注冊表

如果32位系統OFP的注冊表路徑是 HKEY_LOCAL_MACHINE\SOFTWARE\Bohemia Interactive\ 那么在64系統里就應該是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Bohemia Interactive\ 多了一級Wow6432Node轉載于:https://www.cnblogs.com/zhang-pengcheng/p/4712135.html

http 請求頭和響應頭

客戶端發送請求過程帶著的數據&#xff1a; 1.請求地址 2.請求方式 3.請求頭 request headers 4.請求參數 https://www.juhe.cn/ 130.... 1a2b....pei 服務端響應給客戶端的信息&#xff1a; 1.響應內容 2.響應報文/響應頭部 response headers a 響應頭 b 響應體 3.http狀…