1、裁剪網格紙
題目描述
度度熊有一張網格紙,但是紙上有一些點過的點,每個點都在網格點上,若把網格看成一個坐標軸平行于網格線的坐標系的話,每個點可以用一對整數x,y來表示。度度熊必須沿著網格線畫一個正方形,使所有點在正方形的內部或者邊界。然后把這個正方形剪下來。問剪掉正方形的最小面積是多少。 輸入描述: 第一行一個數n(2≤n≤1000)表示點數,接下來每行一對整數xi,yi(-1e9<=xi,yi<=1e9)表示網格上的點 輸出描述: 一行輸出最小面積 輸入例子: 2 0 0 0 3
輸出例子: 9
題目分析:
只要找出給出的坐標中橫坐標和縱坐標的對應的最大值和最小值的差值,取較大的值,進行平方即可。
代碼實現:
#include<iostream>using namespace std;#include<algorithm>#include<vector>//裁剪網格紙int GetMinArea(vector<int> x, vector<int> y){ if (x.size() == 0 || y.size() == 0) return 0; //找出橫縱坐標的最大差值 int diffX = 0; int diffY = 0; sort(x.begin(),x.end()); sort(y.begin(),y.end()); diffX = x[x.size() - 1] - x[0]; diffY = y[y.size() - 1] - y[0]; if (diffX > diffY) return diffX*diffX; else return diffY * diffY;}int main(){ int n = 0; vector<int> x; vector<int> y; while (cin >> n) { while (n--) { int row = 0; int col = 0; cin >> row >> col; x.push_back(row); y.push_back(col); } cout << GetMinArea(x, y) << endl; x.clear(); y.clear(); } return 0;}2、釣魚比賽
題目描述
ss請cc來家里釣魚,魚塘可劃分為n*m的格子,每個格子有不同的概率釣上魚,cc一直在坐標(x,y)的格子釣魚,而ss每分鐘隨機釣一個格子。問t分鐘后他們誰至少釣到一條魚的概率大?為多少? 輸入描述: 第一行五個整數n,m,x,y,t(1≤n,m,t≤1000,1≤x≤n,1≤y≤m); 接下來為一個n*m的矩陣,每行m個一位小數,共n行,第i行第j個數代表坐標為(i,j)的格子釣到魚的概率為p(0≤p≤1) 輸出描述: 輸出兩行。第一行為概率大的人的名字(cc/ss/equal),第二行為這個概率(保留2位小數) 輸入例子: 2 2 1 1 1 0.2 0.1 0.1 0.4 輸出例子: equal 0.20
題目分析:
分別計算出ss和cc釣到魚的概率,進行比較。t分鐘釣到至少一個魚的概率可以這樣計算:1-t分鐘一只魚都沒有釣到的概率。 格式輸出(保留小數點后兩位): setiosflags(ios::fixed) , setPRecision(2)
代碼實現:
#include<iostream>using namespace std;#include <iomanip>#include<math.h>void Match(float a[],int n, int m, int x,int y,int t){ float cc = a[(x-1)*m+y-1]; float ss = 0.0; for (int i = 0; i < n*m; ++i) { ss += a[i]; } ss /= (n*m); if (cc > ss) { cout << "cc" << endl << setiosflags(ios::fixed) << setprecision(2) << 1 - pow(1 - cc, t)<<endl; } else if (cc == ss) { cout << "equal" << endl << setiosflags(ios::fixed) << setprecision(2)<<1 - pow(1 - ss, t) <<endl; } else { cout << "ss" << endl << setiosflags(ios::fixed) << setprecision(2) <<1 - pow(1 - ss, t)<<endl; }}int main(){ int n = 0, m = 0, x = 0, y = 0,t = 0; while (cin >> n >> m >> x >> y >> t) { float* a = new float[n*m]; for (int i = 0;i < n; ++i) { for (int j = 0; j < m; ++j) { cin>>a[m * i + j]; } } Match(a, n,m, x,y,t); } return 0;}