題目鏈結
題意:
在 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 的長度不...