CCF 差分約束--201809再賣菜

問題描述

在一條街上有n個賣菜的商店,按1至n的順序排成一排,這些商店都賣一種蔬菜。   第一天,每個商店都自己定了一個正整數的價格。店主們希望自己的菜價和其他商店的一致,第二天,每一家商店都會根據他自己和相鄰商店的價格調整自己的價格。具體的,每家商店都會將第二天的菜價設置為自己和相鄰商店第一天菜價的平均值(用去尾法取整)。   注意,編號為1的商店只有一個相鄰的商店2,編號為n的商店只有一個相鄰的商店n-1,其他編號為i的商店有兩個相鄰的商店i-1和i+1。   給定第二天各個商店的菜價,可能存在不同的符合要求的第一天的菜價,請找到符合要求的第一天菜價中字典序最小的一種。   字典序大小的定義:對于兩個不同的價格序列(a1, a2, ..., an)和(b1, b2, b3, ..., bn),若存在i (i>=1), 使得ai<bi,且對于所有j<i,aj=bj,則認為第一個序列的字典序小于第二個序列。

輸入格式

輸入的第一行包含一個整數n,表示商店的數量。   第二行包含n個正整數,依次表示每個商店第二天的菜價。

輸出格式

輸出一行,包含n個正整數,依次表示每個商店第一天的菜價。

樣例輸入

8 2 2 1 3 4 9 10 13

樣例輸出

2 2 2 1 6 5 16 10

數據規模和約定

對于30%的評測用例,2<=n<=5,第二天每個商店的菜價為不超過10的正整數;   對于60%的評測用例,2<=n<=20,第二天每個商店的菜價為不超過100的正整數;   對于所有評測用例,2<=n<=300,第二天每個商店的菜價為不超過100的正整數。   請注意,以上都是給的第二天菜價的范圍,第一天菜價可能會超過此范圍。

解析:

  由于是去尾法取整,所以這題的每組相鄰的商店菜價總和是由區間限制的,可以利用差分約束來做。差分約束有一般有兩種求解方式,求最大值,求最小值。這里求字典序最小即要求最小值,可以利用spfa()求最長路徑(不理解的戳這里)。建圖還是采用我個人最喜歡的鏈式向前星(不懂戳這里)。

  PS:鏈接里的大概意思是,求最長路的松弛操作是if (dist[end]<dist[sta]+邊權值){ dist[end]=dist[sta]+權值; },求出的dist[end]的解是滿足約束條件(>=dist[sta]+權值)中最小的(因為取的是等號,還可能存在比這個更大的解)。求最大值的原理類似。

 1 #include <iostream>
 2 #include <queue>
 3 #include <cstring>
 4 using namespace std;
 5 struct Edge{
 6     int to;
 7     int next;//與當前邊起點一樣的另一條邊的位置 
 8     int v;
 9 }edge[2006]; //鏈式向前星:每個節點存一條邊; 
10 int n=0,cur=0; //cur當前已有邊的個數 
11 int a[305],dist[306],vis[305],head[305],inq[305];
12 //head[i]以i為起點的邊最大的編號 
13 void addedge(int from,int to,int w)
14 {
15     edge[cur].next=head[from];
16     edge[cur].to=to;
17     edge[cur].v=w;//路徑權值 
18     head[from]=cur++;//當前節點變為頭結點 
19 }
20 void spfa()//求最長路 
21 {
22     queue<int> q;
23     for(int i=0;i<n+1;++i)
24     {
25         q.push(i);
26         vis[i]=1;
27         dist[i]=0;
28         inq[i]=1;
29     }
30     while(!q.empty())
31     {
32         int x=q.front();
33         q.pop();
34         inq[x]++;
35         vis[x]=0;
36         if(inq[x]>n){//訪問某一節點過多,存在正環,無解 
37             cout<<"no answer"<<endl;
38             return ;
39         }
40         for(int i=head[x];i!=-1;i=edge[i].next)//遍歷與該節點相連的各邊 
41         {
42             int nx=edge[i].to;
43             if(dist[nx]<dist[x]+edge[i].v)
44             {
45                 dist[nx]=dist[x]+edge[i].v;
46                 if(!vis[nx]){
47                     vis[nx]=1;
48                     q.push(nx);
49                 }
50             }
51         }
52     }
53     return ;
54 }
55 int main()
56 {    //解除cin cout 的綁定,提高輸入輸出效率;這個可以當模板記住,當然直接用scanf和print也可以。 
57     ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 
58     memset(head,-1,sizeof(head));//head    全部初始為-1 
59     cin>>n;
60     for(int i=1;i<n+1;++i)
61         cin>> a[i];//第二天的菜價
62     for(int i=0;i<n-2;++i)
63     {
64         addedge(i+3,i,-(a[i+2]*3+2));//從第一個三個相鄰開始,直到最后一個三個三個相鄰 
65         addedge(i,i+3,a[i+2]*3);    
66     } 
67     //首末兩個相鄰,特殊處理 
68     addedge(2,0,-(a[1]*2+1));
69     addedge(0,2,a[1]*2); //首兩個 
70     addedge(n,n-2,-(a[n]*2+1));
71     addedge(n-2,n,a[n]*2); //結尾兩個
72     for(int i=1;i<n+1;++i)
73     {
74         addedge(i-1,i,1); //每個菜價都要大于1 
75     } 
76     spfa();
77     a[1]=dist[1];
78     for(int i=2;i<n+1;++i)
79         a[i]=dist[i]-dist[i-1];
80     cout<<a[1];
81     for(int i=2;i<n+1;++i)
82         cout<<' '<<a[i];
83     cout<<endl;
84     return 0;
85 } 

?(`・ω・′)ゞ敬禮っ

轉載于:https://www.cnblogs.com/GorgeousBankarian/p/10403920.html

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

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

相關文章

Express + Element-ui 實現圖片/文件上傳

使用第三方插件 formidable 處理表單數據/文件 Express 4 以前&#xff0c;我們通常使用 req.files 來對請求中的文件進行處理&#xff0c;但在 Express 4 中這種用法已經被拋棄&#xff0c;默認情況下 req.files 在 req 對象上不再可用。官方推薦我們使用第三方中間件。 在這里…

weblogic12.1.3安裝

weblogic weblogic12.1.3安裝 環境&#xff1a; centos7.5 ip: 192.168.0.94 1、安裝jdk 2、安裝 weblogic 下載、解壓安裝包 wls1213_dev.zip unzip /application/weblogic12/wls1213_dev.zip mv wls12130 /application/weblogic12/ 配置環境變量 配置主機名解析 運行安裝…

閉包那些事

定義&#xff1a; 在一個內部函數里&#xff0c; 對在外部作用域&#xff08;但不是在全局作用域&#xff09; 的變量進行引用&#xff0c; 那么內部函數就被認為是閉包&#xff08;closure&#xff09;。 例子&#xff1a; 1 def make_adder(addend):2 def adder(augend):3 …

10-04 矩形覆蓋(斐波那契數列的應用)

題目描述&#xff1a; 我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形&#xff0c;總共有多少種方法&#xff1f; 解題思路與代碼&#xff1a; 1&#xff09; 排列組合&#xff1a; class Solution { public:int rectC…

Spring 源碼分析 spring-core

先來看下 spring-core 的包結構 總共有6個模塊&#xff0c;分別是 asm、cglib、core、lang、objenesis、util asm包&#xff1a; 用來操作字節碼&#xff0c;動態生成類或者增強既有類的功能。主要包含以下這些類。詳細功能。 https://www.ibm.com/developerworks/cn/java/j…

logging 模塊

一、logging模塊級別及常用函數 默認的level是logging.Warning,低于該級別的就不輸出了。級別排序:Critical> Error > Warning > Info > Debug Logging.Formatter&#xff1a;配置日志的格式&#xff0c;在里面自定義設置日期和時間&#xff0c;輸出日志的時候將會…

大數據項目中的QA需要迎接新的挑戰

大數據項目中的QA需要迎接新的挑戰根據IDC全球半年度大數據和分析支出指南的最新預測&#xff0c;到2022年全球大數據和業務分析解決方案的收入將達到2600億美元。在大數據和業務分析解決方案上投資增長最快的行業包括銀行&#xff08;復合年增長率13.3%&#xff09;、醫療、保…

spring源碼分析之spring-core總結篇

1.spring-core概覽 spring-core是spring框架的基石&#xff0c;它為spring框架提供了基礎的支持。 spring-core從源碼上看&#xff0c;分為6個package&#xff0c;分別是asm&#xff0c;cglib&#xff0c;core&#xff0c;lang&#xff0c;objenesis和util。 1.1 asm 關于as…

五分鐘搞懂后綴數組!

為什么學后綴數組 后綴數組是一個比較強大的處理字符串的算法&#xff0c;是有關字符串的基礎算法&#xff0c;所以必須掌握。 學會后綴自動機(SAM)就不用學后綴數組(SA)了&#xff1f;不&#xff0c;雖然SAM看起來更為強大和全面&#xff0c;但是有些SAM解決不了的問題能被SA解…

spring-core

spring最核心的組件是BeanFactory&#xff0c;看了源碼才發現&#xff0c;BeanFactory并非定義在spring-core中&#xff0c;那spring-core都有啥東東&#xff1f; spring-core主要提供以下服務&#xff0c;為BeanFactory的定義提供基礎服務。 1, ConversionService Conversi…

nginx配置靜態文件過期時間

1. 編輯虛擬主機配置文件/usr/local/nginx/conf/vhosts/huangzhenping.conf 說明&#xff1a;采用location方式 12345678910location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${access_log off;expires 1d;}location ~ \.(js|css){access_log off;expires 1d;}2. 檢查配置文件&#x…

vue 移動端在div上綁定click事件 失效

在.vue的文件中使用了better-scroll&#xff0c;在div標簽上綁定click事件后&#xff0c;無效。 原因&#xff1a;使用了better-scroll&#xff0c;默認它會阻止touch事件。所以在配置中需要加上click: true 即可解決 mounted(){this.$nextTick(() > {let bscrollDom this.…

Java中的鉤子方法

鉤子方法是啥 鉤子顧名思義就是用來掛東西的。那么要掛東西必須有個被掛的東西&#xff0c;要不就是鐵環、要不就是墻的邊沿。所以要能掛住東西必須要有個被勾住的鐵環&#xff0c;要一個鉤子。那么在java中也是同樣的原理&#xff0c;你首先需要一個被掛在的東西&#xff0c;一…

啟動tomcat出現too many connections的原因及解決方法

感謝分享&#xff0c;原文地址&#xff1a;http://blog.sina.com.cn/s/blog_e7e07ec30102vsba.html一、原因 產生too many connections 的直接原因是因為數據庫提供的連接被全部占滿了。數據庫可以提供多少連接&#xff0c;可以再my.cnf(linux)或者my.ini(windows)下設定。這個…

Spring Beans 初始化流程分析

測試用例 依然使用這個官網上的用例&#xff0c;來進行調試&#xff1b; Person.java package org.shangyang.spring.container;/**- - author shangyang**/public class Person {String name;Person spouse;public String getName() {return name;}public void setName(Stri…

劍指offer(65)矩陣中的路徑

題目描述 請設計一個函數&#xff0c;用來判斷在一個矩陣中是否存在一條包含某字符串所有字符的路徑。路徑可以從矩陣中的任意一個格子開始&#xff0c;每一步可以在矩陣中向左&#xff0c;向右&#xff0c;向上&#xff0c;向下移動一個格子。如果一條路徑經過了矩陣中的某一個…

VSCode中怎么改變文件夾的圖標

昨天更新了VSCode后我的文件夾圖標莫名其妙的沒有了&#xff0c;變成了下圖這樣 看著真的讓我難受的頭皮發麻&#xff0c;本來打代碼就頭發少&#xff0c;難道非要讓我變成禿頭&#xff0c;不可能不可能&#xff0c;所以我找了找怎么解決 來&#xff0c;各位看官上眼 如圖所示 …

jdk1.8以前不建議使用其自帶的Base64來加解密

JDK1.8之前的base64是內部測試使用的代碼&#xff0c;不建議生產環境使用&#xff0c;而且未來可能會移除&#xff0c; JDK1.8提供最新可以正式使用的Base64類&#xff0c; 不要使用JDK中自帶的sun.misc.BASE64Decoder這個類去BASE64&#xff0c; 這個會在后面多加換行。使用ap…

Redis的五大數據類型

1.String&#xff08;字符串&#xff09; String是Redis最基本的類型&#xff0c;一個Key對應一個Value。 String類型是二進制安全的&#xff0c;意思是Redis的String可以包含任何數據&#xff0c;比如jpg圖片或者序列化的對象。 String類型是Redis最基本的數據類型&#xff0c…