RUC2024《綜合設計》期中測試

T1
原題鏈接https://www.luogu.com.cn/problem/P1025
不是我出的

T2
原題鏈接:https://www.luogu.com.cn/problem/P26787
這道題就是講過的二分+貪心,先二分規定每兩個點之間都必須大于等于某個值,然后依次枚舉通過貪心求出最少需要刪除的點數,最后用這個最小值和m比較一下即可。

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define dwn(i,x,y) for(int i=x;i>=y;i--)
#define ll long long
using namespace std;
template<typename T>inline void qr(T &x){x=0;int f=0;char s=getchar();while(!isdigit(s))f|=s=='-',s=getchar();while(isdigit(s))x=x*10+s-48,s=getchar();x=f?-x:x;
}
int cc=0,buf[31];
template<typename T>inline void qw(T x){if(x<0)putchar('-'),x=-x;do{buf[++cc]=int(x%10);x/=10;}while(x);while(cc)putchar(buf[cc--]+'0');
}
const int N=5e4+10;
int L,n,m,a[N];
bool check(int lim){int last=0,cnt=0;rep(i,1,n){if(a[i]-last<lim)cnt++;else last=a[i];}if(L-last<lim)cnt++;return cnt<=m;
}
void solve(){qr(L),qr(n),qr(m);rep(i,1,n)qr(a[i]);int l=1,r=L,mid,ans=0;while(l<=r){mid=(l+r)/2;if(check(mid))l=mid+1,ans=mid;else r=mid-1;}qw(ans);
}
int main(){int tt;tt=1;while(tt--)solve();return 0;
}

T3
原題鏈接:https://www.luogu.com.cn/problem/P1149
不是我出的

T4
高中的時候師兄出的題,不過我把簡單版拿出來考大家,原來的版本不止一塊糕,有興趣的同學可以思考。

猜測有不少人會用能切多大切多大的策略,但是這樣確實是不正確的,提交發現答案錯誤以后應該是可以發現的。

正確的思路就是先考慮 n ? 1 n*1 n?1 1 ? m 1*m 1?m這兩種糕,這兩種糕顯然都滿足前面那個貪心,這就說明如果不橫切只豎切的話,切法是固定的。

觀察可以發現,每切一次一邊的長度大概會減少一半,也就是說橫切和豎切的刀數最多也就是30~40,如果超過了就會切成長度為1的。

結合這兩種思路,我們枚舉橫切的刀數,剩下的刀數全部用來豎切,拿一個數組記錄每一邊切多少刀以后還會剩下多少,然后統計即可。時間復雜度為 O ( T l o g N ) O(TlogN) O(TlogN)

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define dwn(i,x,y) for(int i=x;i>=y;i--)
#define ll long long
using namespace std;
template<typename T>inline void qr(T &x){x=0;int f=0;char s=getchar();while(!isdigit(s))f|=s=='-',s=getchar();while(isdigit(s))x=x*10+s-48,s=getchar();x=f?-x:x;
}
int cc=0,buf[31];
template<typename T>inline void qw(T x){if(x<0)putchar('-'),x=-x;do{buf[++cc]=int(x%10);x/=10;}while(x);while(cc)putchar(buf[cc--]+'0');
}
const int N=110;
int n,m,k;
int cnt1,f[N];
int cnt2,g[N]; 
void solve(){qr(n),qr(m),qr(k);f[cnt1=0]=n;while(f[cnt1]>1){cnt1++;f[cnt1]=(f[cnt1-1]+1)/2;}g[cnt2=0]=m;while(g[cnt2]>1){cnt2++;g[cnt2]=(g[cnt2-1]+1)/2;}ll ans=0;rep(i,0,min(cnt1,k)){int j=min(cnt2,max(0,k-i));ans=max(ans,1ll*n*m-1ll*f[i]*g[j]);}qw(ans);puts("");
}
int main(){    int tt;qr(tt); while(tt--)solve();return 0;
}

T5
fyh大神出的
原題鏈接:https://www.luogu.com.cn/problem/P3974
這是fyh大神的思路

#include <cstdio>
const int CN = 1010;
int T, N, M, a[CN][CN];
long long f[CN][CN];
long long max(long long a, long long b, long long c) {if (a > b)return a > c ? a : c;return b > c ? b : c;
}
int main() {scanf("%d", &T);while (T--) {scanf("%d%d", &N, &M);for (int i = 1; i <= N; ++i)for (int j = 1; j <= M; ++j)scanf("%d", &a[i][j]);for (int i = N; i >= 1; --i)for (int j = 1; j <= M; ++j)f[i][j] = max(f[i + 1][j - 1] + a[i][j], f[i + 1][j], f[i][j - 1]);printf("%lld\n", f[1][M]);for (int i = 1; i <= N; ++i)for (int j = 1; j <= M; ++j)f[i][j] = 0;}return 0;
}

洛谷上應該有這種做法的講解,說實話我也感覺很震驚,也不太理解。

下面講一下我的貪心法,這種做法實際上就是一行一行模擬路徑的選擇,大家可以自己模擬一下,這個模擬過程確實挺復雜的。

首先考慮一行的情況,很明顯就是取最大值。

然后考慮兩行的情況,我的思路是在第一行已經確定路徑的基礎上將第二行加上,如果只靠第一行的路徑沒有辦法滿足第二行的全部需求,那么我們再給第二行添上能夠恰好滿足條件的路徑,這些路徑顯然是先下到第二行再往右邊走。對于第一行原本的路徑,我采用的是能往下就往下的做法,比如當前已經有x跳路徑到達 ( 1 , i ) (1,i) (1,i),但是 ( 1 , i ) (1,i) (1,i)右邊的最大值mx小于x,那么就可以把x-mx的路徑提前往下走,剩下的路徑顯然是可以滿足要求的。

現在拓展到一般情況,假設現在要把第i行插入矩陣,其中 f [ i ] [ j ] f[i][j] f[i][j]表示剛好到達 ( i , j ) (i,j) (i,j)的路徑條數,這些路徑剛好就是從第 i ? 1 i-1 i?1行直接下來的。

那么我們馬上就要考慮需要額外引入多少條路徑,這些路徑就是從起點直接下到 ( i , 1 ) (i,1) (i,1)。這個值是 m a x ( 0 , m a x ( a [ i ] [ j ] ? ∑ k = 1 j f [ i ] [ k ] ) ) max(0,max(a[i][j]-\sum_{k=1}^jf[i][k])) max(0,max(a[i][j]?k=1j?f[i][k])),也就是最糟糕的情況是把下來的全部路徑拉到右邊,如果這不能滿足要求,那就要額外引入路徑。

然后的操作就是從左往右枚舉點 ( i , j ) (i,j) (i,j),顯然我們要在每一個點都讓最多的路徑往下,使得剩下的路徑在全部往右走的情況下能夠滿足每一個點的要求,具體實現大家可以自己去想,不過思路都是一樣的,這里只是提供其中實現方法。

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define dwn(i,x,y) for(int i=x;i>=y;i--)
#define ll long long
using namespace std;
template<typename T>inline void qr(T &x){x=0;int f=0;char s=getchar();while(!isdigit(s))f|=s=='-',s=getchar();while(isdigit(s))x=x*10+s-48,s=getchar();x=f?-x:x;
}
int cc=0,buf[31];
template<typename T>inline void qw(T x){if(x<0)putchar('-'),x=-x;do{buf[++cc]=int(x%10);x/=10;}while(x);while(cc)putchar(buf[cc--]+'0');
}
const int N=1e3+10;
const ll inf=1e18;
int n,m,a[N][N];
ll f[N][N],sum[N][N],nd[N][N],mx[N][N];
void solve(){qr(n),qr(m);rep(i,1,n)rep(j,1,n)qr(a[i][j]);rep(i,1,n)rep(j,1,n)f[i][j]=sum[i][j]=0;ll ans=0;rep(i,1,n){rep(j,1,m){sum[i][j]=sum[i][j-1]+f[i][j];nd[i][j]=a[i][j]-sum[i][j];}mx[i][m+1]=-inf;dwn(j,m,1)mx[i][j]=max(mx[i][j+1],nd[i][j]);ans+=max(0ll,mx[i][1]);ll add=max(0ll,mx[i][1]);rep(j,1,m){if(add>mx[i][j+1]){ll maxflow=min(add+sum[i][j],add-mx[i][j+1]);f[i+1][j]+=maxflow;add-=maxflow;}}}qw(ans);puts("");
}
int main(){int tt;qr(tt);while(tt--)solve();return 0;
}

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

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

相關文章

薄冰英語語法學習--名詞2-格

名詞后面 s&#xff0c;代表后面這個東西屬于前面的。 比如toms book&#xff0c;湯姆的書。 末尾是s&#xff0c;那么直接在最后加就行了。比如boys&#xff0c;男孩們的 表示幾個詞共同 的所有關系在最后一個詞的詞尾加 sMary and Toms books 瑪麗和湯姆共有的書表示幾個詞…

深入探討C++的高級反射機制

反射是一種編程語言能力&#xff0c;允許程序在運行時查詢和操縱對象的類型信息。它廣泛應用于對象序列化、遠程過程調用、測試框架、和依賴注入等場景。 由于C語言本身的反射能力比較弱&#xff0c;因此C生態種出現了許多有趣的反射庫和實現思路。我們在本文一起探討其中的奧秘…

DOM遍歷

DOM 遍歷是指在 HTML 文檔中導航和定位元素的過程。通過 DOM 遍歷&#xff0c;您可以在文檔中移動并查找特定的元素&#xff0c;以便對其進行操作或者檢索信息。 尋找子元素 //DOM遍歷 const h1 document.querySelector(h1);//尋找子元素 console.log(h1.querySelectorAll(.…

每天一個數據分析題(三百九十)- 多元線性回歸

在多元線性回歸中&#xff0c;下列哪項可以緩解多重共線性問題&#xff1f; A. 取對數 B. 平方 C. 去除異常值 D. 逐步回歸 數據分析認證考試介紹&#xff1a;點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案 數據分析專項練習題庫 內容涵蓋Python&#xff0c;SQL&am…

從入門到精通:使用Python的Watchdog庫監控文件系統的全面指南

從入門到精通&#xff1a;使用Python的Watchdog庫監控文件系統的全面指南 引言Watchdog庫概述核心組件工作原理 快速開始&#xff1a;設置Watchdog安裝Watchdog創建一個簡單的監控腳本設置和啟動Observer 事件處理&#xff1a;如何響應文件系統的變化基本事件處理處理復雜的場景…

論文生成新紀元:探索頂尖AI寫作工具的高效秘訣

在學術探索的征途中&#xff0c;AI論文工具本應是助力前行的風帆&#xff0c;而非讓人陷入困境的漩渦。我完全理解大家在面對論文壓力的同時&#xff0c;遭遇不靠譜AI工具的沮喪與無奈。畢竟&#xff0c;時間可以被浪費&#xff0c;但金錢和信任卻不可輕棄。 作為一名資深的AI…

@Transactional(rollbackFor = Exception.class)注解

當作用于類上時&#xff0c;該類的所有 public 方法將都具有該類型的事務屬性&#xff0c;同時&#xff0c;我們也可以在方法級別使用該標注來覆蓋類級別的定義。 在項目中&#xff0c;Transactional(rollbackForException.class)&#xff0c;如果類加了這個注解&#xff0c;那…

Java使用Graphics2D畫圖,畫圓,矩形,透明度等實現

背景 如上圖&#xff0c;需要使用Java生成一個圖片&#xff0c; 并以base64編碼的形式返回給前端展示。 使用Graphics2D類&#xff0c;來進行畫圖&#xff0c;其中需要畫方框、原型、插入圖標、寫入文字等&#xff0c;同時需要設置透明度等細節點 環境&#xff1a;Jdk17&#…

Java面試八股之JVM內存泄漏按照發生的方式可以分為哪幾類

JVM內存泄漏按照發生的方式可以分為哪幾類 常發性內存泄漏&#xff08;Frequent Memory Leak&#xff09; 這類內存泄漏發生的代碼會被頻繁執行&#xff0c;每次執行時都會導致一塊或多塊內存無法被回收。由于泄漏行為重復發生&#xff0c;故稱為常發性。這類泄漏通常比較容易…

下一代廣域網技術2:SRv6

2.SRv6 SR架構設計之初&#xff0c;就為SR數據平面設計了兩種實現方式&#xff1a;一種是SR-MPLS&#xff0c;其重用了MPLS數據平面&#xff0c;可以在現有IP/MPLS網絡上增量部署&#xff1b;另一種是SRv6&#xff0c;使用IPv6數據平面&#xff0c;基于IPv6路由擴展頭進行擴展…

Docker部署常見應用之Oracle數據庫

文章目錄 安裝部署參考文章 安裝部署 使用Docker安裝Oracle數據庫是一個相對簡便的過程&#xff0c;可以避免在本地環境中直接安裝Oracle數據庫的復雜性。 安裝Docker環境&#xff1a;確保你的系統上已經安裝了Docker&#xff0c;并且Docker服務正在運行。具體的安裝方法可以根…

使用North自部署圖床服務

圖床 圖床可以把圖片轉為鏈接&#xff0c;從而方便我們書寫、分享博客&#xff0c;目前圖床主要分為以下幾類: 利用 Git 倉庫存儲對象存儲&#xff08;OSS、COS、七牛云等&#xff09;免費公共圖床&#xff08;SM.MS、聚合圖床、ImgTP、Postimage等&#xff09; 但上述圖床都…

低應變復習題

1.比較臨塑荷載、臨界荷載和極限荷載的大小( ) A、臨塑荷載<臨界荷載<極限荷載 B、臨塑荷載>臨界荷載<極限荷載 C、臨塑荷載<臨界荷載>極限荷載 D、臨塑荷載>臨界荷載>極限荷載 參考答案:A 2.面關于低應變反射波法的描述,正確的是:( ) A、反射…

【雜記-淺談BGP邊界網關協議】

BGP邊界網關協議 一、BGP邊界網關協議概述二、BGP的特點及與IGP的區別三、BGP的路由屬性四、BGP協議中使用的報文 一、BGP邊界網關協議概述 1、BGP&#xff0c;Border Gateway Protocol&#xff0c;即邊界網關協議&#xff0c;是一種在自治系統&#xff08;AS&#xff09;之間…

Websocket實現方式二——注解方式

添加Websocket依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>根據ServerEndpoint注解注冊Websocket Configuration public class AgentWsConfig …

多項式回歸(Linear Regression)原理詳解及Python代碼示例

多項式回歸原理詳解 多項式回歸&#xff08;Polynomial Regression&#xff09;是線性回歸&#xff08;Linear Regression&#xff09;的一種擴展形式。它通過在輸入變量上添加高次項來擬合非線性關系。雖然多項式回歸本質上還是線性模型&#xff0c;但它允許模型在輸入特征的多…

if action和Switch之間該怎么選擇?

1. Switch 2. If及If Action Subsystem 3.結論 元素很多&#xff0c;用switch 元素少&#xff0c;用if或switch 如果...很多&#xff0c;用if

職業技能大賽引領下大數據專業實訓教學的改革研究

隨著信息化時代的加速發展&#xff0c;大數據專業作為新興的熱門領域&#xff0c;正日益成為高等職業教育體系中不可或缺的一部分&#xff0c;其承擔著為社會培養大批具有高素質應用技能的大數據技術人才的重任。職業技能大賽作為檢驗和提升學生技能水平的有效平臺&#xff0c;…

web學習筆記(六十九)vue2

1. vue2創建腳手架項目 &#xff08;1&#xff09;在cmd窗口輸入npm install -g vue/cli命令行&#xff0c;快速搭建腳手架。 &#xff08;2&#xff09; 創建vue2項目 &#xff08;3&#xff09; 選擇配置項目&#xff0c;最下面的選項是自己重新配置&#xff0c;第一次創建v…

使用mmdetection遇到的一些問題總結

【問題1】 No module named ‘mmcv._ext’ 應該安裝mmcv-full 而不是mmcv 【問題2】cannot import name ‘Config‘ from ‘mmcv‘ 原因是mmcv的版本太高兩種解決方案&#xff1a;1&#xff09;降低mmcv版本。2&#xff09;將 from mmcv import Config, DictAction 修改為 fro…