微軟程式設計之美 Qual B 長方形 思維

2021-08-03 20:07:09 字數 1318 閱讀 1144

題目鏈結

題意:

在 n 條水平線與 m 條豎直線構成的網格中,放 k 枚石子,每個石子都只能放在網格的交叉點上。問在最優的擺放方式下,

最多能找到多少四邊平行於座標軸的長方形,它的四個角上都恰好放著一枚石子。

思路:這個題想了好多,還是沒想明白。這就比較菜了...

這個題的話,先考慮什麼情況下會使得得到的長方形最多.肯定是將其盡可能的填成x*y的形狀的.即:x*y的格仔中每一點都存在石子.從而可以得到c(x,2)*c(y,2)個長方形,.那麼我們先考慮填成乙個正方形,在繼續補.k個石子最多可以填成kk=sqrt(k) ,kk*kk的正方形(超過就重複了),那麼剩下的石子我們先考慮,將他補到長邊上,這樣新增加的和長邊的又能構成很多的長方形,設剩餘的為l ,即為c(l,2)*x(長邊長).如果長邊長超過了最大的限制,再補到短邊上.

對於給定的k一定存在行列關係使得其最大,這裡我們就列舉乙個行的關係,固定行的大小小於列.並維護最優解

#include#define ri(a) scanf("%d", &a)

#define rl(a) scanf("%lld", &a)

#define rf(a) scanf("%lf", &a)

#define rs(a) scanf("%s", a)

#define pi(a) printf("%d\n", (a))

#define pf(a) printf("%lf\n", (a))

#define pl(a) printf("%lld\n", (a))

#define ps(a) printf("%s\n", (a))

#define w(a) while(a--)

#define clr(a, b) memset(a, (b), sizeof(a))

#define mod 1000000007

#define inf 0x3f3f3f3f

#define exp 0.00000001

#define pii pair#define mp make_pair

#define pb push_back

using namespace std;

typedef long long ll;

const int maxn=1e5+10;

int n,m,k;

int t;

ll c(int s)

ll solve(int x,int y)

printf("case #%d: ",tt++);

pl(ans);

} return 0;

}

2013程式設計之美資格賽 長方形

題目 在 n 條水平線與 m 條豎直線構成的網格中,放 k 枚石子,每個石子都只能放在網格的交叉點上。問在最優的擺放方式下,最多能找到多少四邊平行於座標軸的長方形,它的四個角上都恰好放著一枚石子。輸入 輸入檔案包含多組測試資料。第一行,給出乙個整數t,為資料組數。接下來依次給出每組測試資料。每組資料...

程式設計之美2013 資格賽第二題 長方形

長方形 時間限制 1000ms 記憶體限制 256mb 在 n 條水平線與 m 條豎直線構成的網格中,放 k 枚石子,每乙個石子都僅僅能放在網格的交叉點上。問在最優的擺放方式下,最多能找到多少四邊平行於座標軸的長方形,它的四個角上都恰好放著一枚石子。輸入檔案包括多組測試資料。第一行,給出乙個整數t,...

微軟程式設計之美 初賽

相似字串對於兩個長度相等的字串,我們定義其距離為對應位置不同的字元數量,同時我們認為距離越近的字串越相似。例如,0123 和 0000 的距離為 3,0123 和 0213 的距離則為 2,所以與 0000 相比,0213 和 0123 最相似。現在給定兩個字串 s1 和 s2,其中 s2 的長度不...