算法馬拉松13 A-E解題報告

A題意(取余最長路):

  佳佳有一個n*m的帶權矩陣,她想從(1,1)出發走到(n,m)且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。

有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為對p取模后的值,這讓佳佳十分的不開心,因為她無法找到一條能使她得到最大娛樂值的路徑了!

她發現這個問題實在是太困難了,既然這樣,那就只在3*n的矩陣內進行游戲吧!

現在的問題是,在一個3*n的帶權矩陣中,從(1,1)走到(3,n),只能往右往下移動,問在模p意義下的移動過程中的權總和最大是多少。

n(1<=n<=100000),p(1<=p<=1000000000)。

  最簡單的思路就是 搞一搞前綴和 枚舉兩個轉折點 那么復雜度是n^2。BOOM!

  設三段的前綴和和 分別為s1,s2,s3? 設轉折點分別為(2,x1) (2,x2)

再仔細想一想p-1肯定是我們能得到的最大值,那么我們可以優化到枚舉一個轉折點(第二個轉折點),前兩段的結果丟在set里;

二分就OK了。

但是為了不影響二分的結果,做了一點改動(set不能丟入1,1->2,x1->2,x2)。應丟入1,1->2,x1->2,n 的和

前綴和表示為 s2[n]+s1[x1]-s2[x1-1];

二分的值變為((p-1)-(s3[n]-s3[x2-1])+((s2[n]-s2[x2]))+p)%p,每次更新答案就OK了

再觀察一下發現插入和查詢的時候都加了s2[n]

所以我們把s2[n]去掉=。=

然后s3[]用的一直是x2->n的和? 這里應該用個后綴和的

寫的時候手殘讀入錯誤,導致以為思路不對 --- 浪費了很多時間? (被自己氣笑

PS:啊現在的我們是多么幸福,現成的STL啦啦啦;

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cstring>
#include <set>
using namespace std;
const int maxn = 1e5+10;
typedef long long ll;
inline void r(ll&num){num=0;ll f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();num*=f;
}
inline void r(int &num){num=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();num*=f;
}
ll s1[maxn],s2[maxn],s3[maxn];
int main()
{int n;ll p;r(n),r(p);for(int i=1;i<=n;i++){r(s1[i]);s1[i]=(s1[i]+s1[i-1])%p;}for(int i=1;i<=n;i++){r(s2[i]);s2[i]=(s2[i]+s2[i-1])%p;}for(int i=1;i<=n;i++){r(s3[i]);s3[i]=(s3[i]+s3[i-1])%p;}set<ll>s;ll ans = -1;set<ll>::iterator it;ll sum;ll cnt;for(int i=1;i<=n;i++){s.insert(((s1[i]-s2[i-1])%p+p)%p);sum = (s3[n]-s3[i-1]+s2[i])%p;cnt = ((p-sum)%p+p)%p;it = s.lower_bound(cnt);if(it!=s.begin()) it--;ans = max(ans,((((*it)+sum)+p)%p));}cout<<ans<<endl;return 0;
}
有漏洞

?這里有一個小技巧? 我們如果想找出小于等于X的最大值 我們只需lower_boundX+1? 得到大于等于X+1的區間[it,end)? 那么 [begin,it) 就是小于等于X的區間;

if it == begin 不存我們要的值

else *(--it)就是我們要的值辣

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cstring>
#include <set>
using namespace std;
const int maxn = 1e5+10;
typedef long long ll;
inline void r(ll&num){num=0;ll f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();num*=f;
}
inline void r(int &num){num=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();num*=f;
}
ll s1[maxn],s2[maxn],s3[maxn];
int main()
{int n;ll p;r(n),r(p);for(int i=1;i<=n;i++){r(s1[i]);s1[i]=(s1[i]+s1[i-1])%p;}for(int i=1;i<=n;i++){r(s2[i]);s2[i]=(s2[i]+s2[i-1])%p;}for(int i=1;i<=n;i++){r(s3[i]);s3[i]=(s3[i]+s3[i-1])%p;}set<ll>s;ll ans = -1;set<ll>::iterator it;ll sum;ll cnt;for(int i=1;i<=n;i++){s.insert(((s1[i]-s2[i-1])%p+p)%p);sum = (s3[n]-s3[i-1]+s2[i])%p;cnt = ((p-sum)%p+p)%p;it = s.lower_bound(cnt);if(it!=s.begin()) it--;else    it = --s.end();ans = max(ans,((((*it)+sum)+p)%p));}cout<<ans<<endl;return 0;
}
AC代碼

?C題意(比大小):

   有兩個數列A和B 已知A_0,a,b,N A_n=A_(n-1)*a+b (n>=1) B數列滿足 B_n=2*B_(n/2) + 1 (n為偶數) B_n=2*B_((n-1)/2) + (n+1)/2 (n為奇數)
現在問B數列的第A_N項和第(A_N)+1項的關系
T組數據 A_0,a,b,N<=1e15

T<=100
N 1e15? 沒規律鐵定做不了
B_0 = -1;
然后把B序列暴力出來前40項? 發現規律 除了0-3 不符合規律外 后面連續的四個都符合規律
這時候就需要考慮A序列了 如果發現A_N小于4 那就需要特判 (題意說的也不是太清如果?A_0<=3 , ?a = 0,b = 0, N = 1e15 這個數據肯定T
然后暴力N項 發現還有規律
N<=3?特判
N>=4 ?走N次 和 N%4+4結論一樣
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cstring>
#include <set>
using namespace std;
typedef long long ll;
inline void r(ll&num){num=0;ll f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();num*=f;
}
inline void r(int &num){num=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')num=num*10+ch-'0',ch=getchar();num*=f;
}
ll a,b,N;
ll A0,AN,A;
bool flag = false;
ll B[40];
void check()
{if(flag){A+=4;}if(B[A]==B[A+1]){puts("=");}else{if(B[A]<B[A+1]){puts("<");}else{puts(">");}}
}
int main()
{int T;r(T);B[0] = -1;//cout<<"-1"<<endl;for(int i=1;i<40;i++){B[i] = B[i/2]*2+1;if(i&1){B[i]+=i/2;}//cout<<B[i]<<endl;
    }while(T--){flag = false;r(A0),r(a),r(b),r(N);A = A0;for(ll i=1;i<=N;i++){if(A>4){flag = true;break;}A = A*a+b;//A%=4;
        }A = A0%4;N = N > 3 ? N % 4 + 4 : N;for(int i=1;i<=N;i++){A = A*a+b;A%=4;}    check();}return 0;
}
AC代碼

?

轉載于:https://www.cnblogs.com/Geek-xiyang/p/5785437.html

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

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

相關文章

Modis數據處理工具:MRT百度網盤下載和手把手圖文安裝教程

如下圖所示為 MODIS Reprojection Tool(MRT)的軟界面,看似簡單,卻是Modis遙感影像必不可少的處理工具,如投影變換等。本文以圖文并茂的形式,詳細講解MRT軟件在Windows10平臺上的安裝過程,并附MRT軟件百度網盤下載地址。 Modis Tool主界面: 一、安裝過程 1、安裝Jav…

Word中如何設置圖片與段落的間距為半行

第一種&#xff1a; 正文為5號&#xff0c;那么圖片或者Viso對象前后空一行&#xff0c;設置字號為7號或者更小&#xff0c;這樣設置的間距就是那個7號字的間距&#xff0c;比5號小&#xff0c;看著空白不是那么大。 第二種&#xff1a; Visio對象轉為jpg&#xff0c;然后選中圖…

在微信小程序中使用“隨機鍵盤”

最近研究微信小程序&#xff0c;發現在手機上使用系統鍵盤非常不方便&#xff0c;一是按鍵太小&#xff0c;對于小學生來說&#xff0c;操作非常不方便&#xff1b;二是系統鍵盤反復切換影響界面布局。于是自己決定自己寫一個隨機的小鍵盤。 原理非常簡單&#xff1a;拿“口算練…

Android之提示訂閱配置訂閱需要傳新的包 添加結算權限。

1 問題 apk上google應用市場&#xff0c;然后開通支付商品&#xff0c;錯誤提示如下 2 解決辦法 AndroidManifest.xml里面添加谷歌支付權限 <!-- google pay --><uses-permission android:name"com.android.vending.BILLING" />

【前端就業課 第一階段】HTML5 零基礎到實戰(三)一篇文CSS基礎入門

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

C#如何獲取實體類屬性名和值?

數據模型定義public class User{public User(){student new student();}public string name { get; set; }public string gender { get; set; }public int age { get; set; }public student student { get; set; }}public class student{public int ID { get; set; }public st…

將VNC 安裝在Centos 7步驟

&#xff08; Virtual Network Computing&#xff09;VNC允許Linux系統可以類似實現像Windows中的遠程桌面訪問那樣訪問Linux桌面。本文配置機器是興寧市網絡信息中心的一臺Centos 7 HP服務器環境下運行。 首先試試服務器裝了VNC沒 [rootwic ~]# rpm -q tigervnc tigervnc-serv…

利用MRT進行Modis NDVI數據(MOD13Q1)投影變換格式轉換操作圖文教程

本實例以Modis NDVI(MOD13Q1,空間分辨率為250m)一景影像數據為例,演示利用MRT進行Modis NDVI影像變換,主要內容包括:將.hdf格式轉為.tif格式,將坐標系轉為Albers等積投影。 ArcGIS完美轉換方法: 《ArcGIS10.8完美實現MODIS NDVI數據格式轉換和投影變換》 《重磅!ArcGI…

ActiveMQ無法啟動

解決辦法&#xff1a;activemq無法啟動&#xff0c;端口被占用 用netstat -an無法查出61616被哪個進程占用&#xff08;實踐證明&#xff0c;netstat -ano|findstr 61616什么也沒有找到&#xff09; 經過排查和網上資料參考&#xff0c;被windows的Internet connection share(I…

Android之升級OkHttp編譯提示錯誤如下Using ‘body(): ResponseBody?’ is an error. moved to val

1 問題 升級okHttp庫&#xff0c;編譯項目錯誤如下 Using ‘body(): ResponseBody?’ is an error. moved to val 2 解決辦法 原來的代碼 val list response.body().string() 去掉&#xff08;&#xff09;就可以了 val list response.body.string()

單例

當實際上Singleton是一個對象&#xff0c;我們不能保證使用者不會使用其他的方法去創建&#xff08;比如alloc&#xff09;,這個時候他就會創建多個實例&#xff0c;這樣就會出現這些無法感知的bug&#xff09; implementation Singleton static Singleton * sharedSingleton …

Google 開源的 Android 排版庫:FlexboxLayout

最近Google開源了一個項目叫「FlexboxLayout」。1.什么是 Flexbox簡單來說 Flexbox 是屬于web前端領域CSS的一種布局方案&#xff0c;是2009年W3C提出了一種新的布局方案&#xff0c;可以簡便、完整、響應式地實現各種頁面布局&#xff0c;并且 React Native 也是使用的 Flex 布…

Docker Network 配置,自定義bridge網絡

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182Docker Network 配置&#xff0c;自定義bridge網絡 1.停止服務 service docker stop 2.關掉docker0 ifconfi…

再見 KataCoda——O'Reilly 宣布其將在六月份關閉

近日聽聞 OReilly 將永久關閉在線學習網站 KataCoda&#xff0c;對于廣大程序員和學習者來說&#xff0c;這無疑是一件痛心疾首的事情&#xff0c;以后我們再也看不到那只會變成的功夫貓了。KataCoda 簡介KataCoda 成立于 2016 年&#xff0c;它是一個在線學習平臺&#xff0c;…

中國區域Modis行列號(附Shapefile文件下載)

重磅&#xff1a;Landsat中國西北地區行列號Shapefile圖層對照&#xff08;附行列號Shapefile下載&#xff09; 全球&#xff1a; 中國&#xff1a;

Android之解決webview加載第三方網頁點擊彈不出下拉框(html頁面里面的select標簽)

1 問題 決webview加載第三方網頁點擊彈不出下拉框&#xff08;html頁面里面的select標簽&#xff09;&#xff0c;我們訪問youtube.com官網&#xff0c;點擊網站的視頻&#xff0c;點擊視頻右上角三個點設置&#xff0c;然后點擊 播放設置 然后點擊畫質 彈不出選項框&#xf…

【前端就業課 第一階段】HTML5 零基礎到實戰(四)偽類與偽元素

注意&#xff1a;手機&#xff08;APP&#xff09;打開&#xff0c;內容顯示更佳&#xff0c;不會的私聊博主即可 想要拿代碼或加入學習計劃&#xff08;** 博主會監督你并且教你寫文章 **&#xff09;的拉到最下面&#xff08;PC端Web打開&#xff09;加博主即可&#xff0c;目…

編寫第一個響應式頁面

2019獨角獸企業重金招聘Python工程師標準>>> 本文為大家講解如何使用一種科學的方法實現網頁設計&#xff0c;從原理上搞清楚什么是響應式設計&#xff0c;并實現一個簡易的響應式設計框架&#xff0c;以此為基礎&#xff0c;編寫出第一個響應式頁面。 不知道現在大…

container 的背后

如果要看laravel的單個功能的源代碼&#xff0c;首先去找對應得ServiceProvider,例如加密功能hash,則按一下步驟查看源代碼&#xff1a; HashServiceProvider.php(主要是看register方法) singleton()方法就是將BcryptHasher這個類實例化一次&#xff0c;然后在哪里都可以用&…

android中像素單位dp、px、pt、sp的比較

dp(dip): device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關&#xff0c;一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個&#xff0c;不依賴像素。px: pixels(像素). 不同設備顯示效果相同&#xff0c;一般我們HVGA代表320x480像素&…