1.畫板
題目描述:
沫璃有一個畫板,畫板可以抽象成有100行每行100個像素點的正方形。沫璃在畫板上畫畫,她一共畫了n次,每次將一個矩形塗上顏色。沫璃想知道一共有多少個像素點被她塗過顏色。若一個像素點被塗了k次,那麼認爲有k個像素點被塗過顏色。
輸入描述:
第一行一個數T(T<=100),表示數據組數。
對於每組數據,第一行一個整數n , (1<=n<=100)
接下來n行,每行4個整數x1, y1,x2, y2 (1 <= x1 <= x2 <= 100,
1 <= y1 <= y2 <= 100),表示矩形的兩個對角所對應的像素點的座標。
輸出描述:
對於每組數據,輸出一行,表示沫璃一共塗了多少個像素點。
示例:
輸入:
2
2
1 1 2 3
2 2 3 3
2
1 1 3 3
1 1 3 3
輸出:
10
18
方案:每塗一個矩形(假設對角座標爲(x0,y0),(x1,y1)),其內的像素點個數爲
(x1-x0+1) * (y1-y0+1);
#include <iostream>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n;
cin>>n;
int result = 0;
while(n--){
int x0,y0,x1,y1;
cin>>x0>>y0>>x1>>y1;
result += (x1-x0 + 1) * (y1-y0+1);
}
cout<<result<<endl;
}
return 0;
}
2.交易
題目描述:
沫璃發起了一場交易,她將她的5個朋友聚在一起準備進行一場交易。交易開始前,大家各有b(b>0)個硬幣,交易後,每個人有ai個硬幣。由於硬幣不方面攜帶,在交易過程中可能會丟失。現在沫璃想知道是否一定丟失硬幣,或者在可能沒有丟失硬幣的情況下,交易前每個人的硬幣數b。沫璃只是組織者,不參與交易。
輸入描述:
第一行一個數T(T<=100),表示數據組數。
對於每組數據,第一行5個整數,第i個整數ai表示交易後第i個朋友的硬幣數(0<=ai<=100)
輸出描述:
對於每組數據,輸出一行,若一定丟失硬幣輸出-1,若可能沒有丟失硬幣,輸出b。
示例:
輸入:
2
2 5 4 0 4
4 5 9 2 1
輸出:
3
-1
方案:由題目可知,當硬幣總數可以被5整除時,則說明沒有丟失;反之則丟失。同時要考慮硬幣數爲0的情況。
#include <iostream>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int sum = 0;
int result = -1;
int n = 5;
while(n--){
int tmp=0;
cin>>tmp;
sum += tmp;
}
if(sum != 0 && sum % 5 == 0){
result = sum / 5;
}
cout<<result<<endl;
}
return 0;
}
3.派對
題目描述:
沫璃邀請她的朋友參加週末的派對。沫璃買了3種顏色的氣球,現在她要有這些氣球來裝飾餐桌,每個餐桌只用恰好3個氣球裝飾,要求3個氣球的顏色不能完全一樣,可以是2種或者3種顏色。沫璃想知道這些氣球最多能裝飾多少張餐桌。
輸入描述:
第一行一個數T(T<=100),表示數據組數。
對於每組數據,第一行3個整數r,g,b,分別表示三種顏色的氣球個數(0<=r, g, b<=2*10^9)
輸出描述:
對於每組數據,輸出一行,一個整數表示最多能裝飾的餐桌數量。
示例:
輸入:
2
5 4 3
2 3 3
輸出:
4
2
方案:首先注意氣球個數的範圍,因此應選擇long 類型或者long long類型。
分類討論:
如果最大的氣球個數比兩個小的加起來的2倍還大,那麼最大的一些氣球就用不到,可裝飾的桌子爲兩個小的加起來的和;反之,則爲三個加起來的和直接除3即可。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
long c;
int n = 3;
vector<long> color;
while(n--){
cin>>c;
color.push_back(c);
}
sort(color.begin(),color.end());
long result = 0;
if(color[2] > 2*(color[0]+color[1])){
result = color[0] + color[1];
}
else{
result = (color[0] + color[1] + color[2])/3;
}
cout<<result<<endl;
}
return 0;
}
4.賽馬
題目描述:
茉莉有2n匹馬,每匹馬都有一個速度v,現在茉莉將馬分爲兩個隊伍,每個隊伍各有n匹馬,兩個隊之間進行n場比賽,每場比賽兩隊各派出一匹馬參賽,每匹馬都恰好出場一次。茉莉想知道是否存在一種分配隊伍的方法使得無論怎麼安排比賽,第一個隊伍都一定能獲的全勝,兩匹馬若速度不一樣,那麼速度快的獲勝,若速度一樣,則都有可能獲勝。
輸入描述:
第一行一個數T(T<=100),表示數據組數。
對於每組數據,第一行一個整數n , (1<=n<=100)
接下來一行,2*n個整數,第i個整數vi表示第i匹馬的速度,
(1<= vi <= 1000)。
輸出描述:
對於每組數據,輸出一行,若存在一種分配方法使得第一個隊伍一定能獲得全勝,
輸出YES,否則輸出NO.
示例:
輸入:
2
2
1 2 3 4
1
1 1
輸出:
YES
NO
方案:
將速度數據排序,中間兩個數若相同,則NO;反之未YES。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int T=0;
cin>>T;
while(T--){
int n;
cin>>n;
vector<int> v;
int tmp;
for(int i=0;i<2*n;i++){
cin>>tmp;
v.push_back(tmp);
}
sort(v.begin(),v.end());
if(v[n - 1] == v[n]){
cout<<"NO"<<endl;
}
else{
cout<<"YES"<<endl;
}
}
return 0;
}
5.玫瑰花
題目描述:
有K種不同的玫瑰花,現在要擺放在N個位置上,要求每種顏色的花至少出現過一次,請問有多少種不同的方案數呢?,因爲答案可能很大,你只需要輸出它對772235取餘後的結果.
輸入描述:
輸入只有1行,分別有兩個整數N,K( 1 <= N <= 50000 , 1 <= K <= 30 )
輸出描述:
輸出一行表示答案
示例:
輸入:
3 2
輸出:
6
6.奇異長度
題目描述:
給你一個圖,0節點連接這一個聯通塊a,1節點連接着一個聯通塊b,ab僅由01這條邊相連。現在我們定義奇異路徑爲恰好經過0-1這條邊一次的路徑。在這個圖中有無數條奇異路徑,問第k長的奇異路徑長度是多少?
輸入描述:
輸入若干行,第一行有三個正整數n,m,k,表示有n個節點,0~n-1,有m條邊,問第k長,接下來有m行u,v,表示邊,保證0-1邊只出現一次,保證a,b聯通塊只通過0-1相連。 5<=n<=100,k<2^40
輸出描述:
輸出一行表示答案。
示例:
輸入:
5 4 10
0 1
0 2
1 3
1 4
輸出:
4
總結:
1.平臺上處理多組數據的方式。
int T;
cin>>T;
while(T--){
...
}
2.sort函數的使用,默認按非降序排序。
參考博客:
https://www.cnblogs.com/TX980502/p/8528840.html
3.注意題目中的數值條件範圍設置。
參考博客:
各數據類型取值範圍:
https://www.runoob.com/cplusplus/cpp-data-types.html
https://www.cnblogs.com/cing/p/8038055.html
https://www.csdn.net/gather_25/MtzaYgysNDgtYmxvZwO0O0OO0O0O.html