菜雞乙個,只做出兩道,先掛一下,剩下的會了繼續更
1、小a的計算器
題目描述 :
小a的數學基礎實在太差了,以至於他只會用計算器算數。他的計算器比較特殊,只有
,+ ,-, *,/ (即加減乘除)四種運算。
經過一番周折,小a終於算出了他想要的數,但是他卻忘記了最初的數是什麼。不過幸運的是他記下了整個操作序列,他想請你幫他算出最初的數
輸入描述:
第一行兩個整數n, x,分別表示操作次數和最終的數接下來n行表示操作序列,每行兩個數opt, x
若opt= 1則表示將當前數加x
若opt= 2,則表示將當前數減x
若opt= 3,則表示將當前數乘x
若opt=4,則表示將當前數除以x
輸出描述:
乙個整數表示最初的數
示例1輸入
4 61 3
2 13 3
4 2輸出
2示例2
輸入3 292
3 24 3
4 3輸出
1314
備註:n⩽100,0資料保證:
最初的數在進行操作時不會超過long long範圍
如果你的程式合法,那麼運算中所有的數均為整數,所有的除法均為整除!
不會出現整數被0除的情況
只需要用一下stl裡面的stack就可以了,簽到題,沒什麼難度
4、小a的排列#include#includeusing namespace std;
struct p;
stack s;
int main()
while(!s.empty()) }
cout<2、小a與204
題目描述
小a非常喜歡204這個數字,因為′a′+′k′=204現在他有乙個長度為n的序列,其中只含有2,0,4這三種數字設ai為序列中第i個數,你需要重新排列這個數列,使得∑(ai−ai−1)^2最大(公式的含義是:每個數與前乙個數差的平方的和)
注意:我們預設a0=0
輸入描述:
第一行乙個整數n接下來一行n個整數,第i個數表示ai
輸出描述:
輸出乙個整數,表示∑(ai−ai−1)^2的最大值
示例1輸入
22 4
輸出20
示例2輸入
32 0 4
輸出36
示例3輸入
52 4 0 2 4
輸出52
備註:1⩽n⩽105
保證ai為2/0/4中的數
用了乙個比較笨的辦法,先排序,再根據一小一大交替,這樣能保證和最大,猜測有簡便方法,因為只有2、0、4這三個數這個條件沒用上,可能是根據這三個數的個數有簡便方法
#include#includeusing namespace std;
int num[100005];
int main()
cout<3、小a的轟炸遊戲
題目描述
小a正在玩一款即時戰略遊戲,現在他要用航空母艦對敵方陣地進行轟炸
地方陣地可以看做是n×m的矩形航空母艦總共會派出q架飛機。
飛機有兩種,第一種飛機會轟炸以(xi,yi)為中心,對角線長為li的正菱形(也就是兩條對角線分別於x軸 y軸平行的正方形),而第二種飛機只會轟炸正菱形的上半部分(包括第xi行)
(具體看樣例解釋)
現在小a想知道所有格仔被轟炸次數的異或和
注意:不保證被轟炸的格仔一定在矩形範圍內,若越界請忽略
輸入描述:
第一行三個整數n,m,q,分別表示矩陣的長/寬/詢問次數
接下來q行,每行四個整數opt,x,y,l,表示飛機型別,轟炸的座標,以及對角線長度
保證l為奇數!
輸出描述:
乙個整數,表示所有格仔被轟炸次數的異或和
示例1輸入:
4 5 4
1 2 2 1
1 3 3 5
1 3 2 3
2 2 4 3
輸出:2
參***用的是二維差分,原諒我技術不夠從來沒聽說過這種方法,用的笨辦法,超時,過了一半,5000+人乙個ac的都沒有,果然難,實在想不出還有什麼可以繼續優化的地方了,先掛乙個過了一半超時的**
#include#includeint map[1010][1010];
int n,m;
int main()
} else
}int ans=0;
for(int i=0;i難點在於怎麼確定被轟炸的範圍,給的是轟炸的中心座標和轟炸半徑,也就是說要根據這個來確定乙個菱形,最簡單的情況是轟炸的菱形完全在地圖內,這種情況下就通過座標和半徑來確定就可以,每一行差2個點,這樣就可以確定,更複雜一點的情況是轟炸區域比地圖還要大,這樣就需要進行縮小,從轟炸中心的一行往上不斷縮小就可以了,菱形的下半部分是對稱的,**不需要有太大改動,用笨辦法做只能做到這樣,暫時還想不出來**還可以優化了,答案的二維差分如下,反正我是看不懂了
#include#define ll long long
using namespace std;
const int maxn = 1e6 + 10, max = 5001, inf = 1e9 + 10, base = 1201;
void chmin(int &a, int b)
void chmax(int &a, int b)
int sqr(int x)
inline int read()
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}int n, m, q, type[maxn], a[max][max], opt[max][max][2], b[max][max], xx[maxn], yy[maxn], ll[maxn];
void solve1(int x, int y, int len)
void solve2(int x, int y, int len)
void print()
signed main()
}memcpy(b, a, sizeof(a));
memset(a, 0, sizeof(a));
memset(opt, 0, sizeof(opt));
for(int i = 1; i <= q; i++)
if(type[i] == 1) solve2(xx[i], yy[i], ll[i]);
for(int i = n + base * 2; i >= 0; i--)
}//print();
int ans = 0;
for(int i = 1 + base; i <= n + base; i++)
for(int j = 1 + base; j <= m + base; j++)
ans ^= (a[i][j] + b[i][j]);
cout << ans;
return 0;
}
題目描述
小a有乙個長度為n的排列。定義一段區間是"萌"的,當且僅當把區間中各個數排序後相鄰元素的差為1現在他想知道包含數x,y的長度最小的"萌"區間的左右端點
也就是說,我們需要找到長度最小的區間[l,r],滿足區間[l,r]是"萌"的,且同時包含數x和數y如果有多個合法的區間,輸出左端點最靠左的方案。
輸入描述:
第一行三個整數n,x,y,分別表示序列長度,詢問的兩個數
第二行有n個整數表示序列內的元素,保證輸入為乙個排列
輸出描述:
輸出兩個整數,表示長度最小"萌"區間的左右端點
輸入5 2 3
5 2 1 3 4
輸出2 4
輸入8 3 5
6 7 1 8 5 2 4 3
輸出5 8
備註:保證2⩽n⩽105,1⩽x,y⩽n
考點在於模擬和分析,意思就是說找乙個連續序列包含給出的兩個數,很像藍橋杯2023年本科b裡面的一道題,但是這一道更難,大體思路就是先找到給你的l和r,之後擴充套件空間,直到符合連續空間為止,這裡補充一點,一般的連續空間問題都要用到公式:max-min=r-l,即區間最大值-區間最小值等於右端點-左端點。具體看官方的**,自己寫的能過25%的資料,因為沒有考慮到擴充套件區間的更優方法。
強烈吐槽官方給的測試用例,情況太少,這裡補充一組測試用例#includeusing namespace std;
const int maxn = 1e5 + 10, inf = 1e9 + 10;
void chmin(int &a, int b)
void chmax(int &a, int b)
int n, l, r, a[maxn], pos[maxn];
int main()
cout << l << ' ' << r;
return 0;
}
輸入:9 7 4
1 3 6 9 7 5 8 4 2
以這組測試用例為例,需要的l為7,r為4,交換一下後為l=4,r=7,就是說目前區間為這四個數,要想成為連續空間,需要補乙個6,在對應的pos陣列中查詢4-7的位置,從而求出要想使其 變成連續空間,就要把原區間擴充套件到l=6,r=7,這時候從l到r擴充套件為,由於擴充套件了一部分,要重新找區間最大值和區間最小值,再從對應pos陣列裡找位置,發現這時不需要再擴充套件空間,此時就說明現在的l-r為要求的萌區間,輸出l和r的位置即可。
主要的難點在於怎麼擴充套件區間,連續區間的特點要求要找最小和最大,再找最小和最大對應的位置,在這個新區間中再找最大最小,直到不需要再擴充套件區間。
牛客寒假演算法基礎集訓營1
題意 給出乙個n m的矩陣,找出有如下條件的三角形的個數 1.三角形的三個頂點均為格點,即橫座標和縱座標均為整數。2.三角形的面積為1 3.三角形至少有一條邊和x軸或y軸平行。思路 滿足條件的三角形有兩類 1 底為1,高為2 2 底為2,高為1。使底邊分別平行於x軸和y軸,其中會有重複的,計算中減去...
牛客寒假演算法基礎集訓營
首先看到這個題目資料範圍就可以知道這不是乙個可以暴力過的題。所以應該要推乙個結論。我們可以將這個同學的一來一回看成一組,那麼就可以理解為乙個來回中n可以減少n m 1 個人。那麼我們現在要讓所有人都進去,那就是看n m 1 的數量。但是有可能存在一些情況,就是說當你的倒數第二組中的回來的那趟使得n變...
2020牛客寒假演算法基礎集訓營1
找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...