BZOJ 1600 Usaco2008 Oct 建造栅栏

题目大意:给定一个长度为n(n≤2500)的木板,要求分成4部分拼成一个面积为正的四边形,求方案数

能拼成一个面积为正的四边形等价于任意一个木板的长度<n2

切割点有3个,前两个枚举,第三个O(1)计算即可

时间复杂度O(n2)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,ans;
int main()
{
    int i,j;
    cin>>n;
    int limit=n-1>>1;
    for(i=1;i<=limit;i++)
        for(j=1;j<=limit&&i+j+2<=n;j++)
        {
            int l=max(1,n-i-j-limit);
            int r=min(n-i-j-1,limit);
            ans+=r-l+1;
        }
    cout<<ans<<endl;
    return 0;
}
时间: 2024-11-10 13:43:27

BZOJ 1600 Usaco2008 Oct 建造栅栏的相关文章

BZOJ 1600 [Usaco2008 Oct]建造栅栏 DP

题意:链接 方法: DP 解析: 一眼DP题. 四边形好像和三角形没什么大区别,就是三边之和大于另一边就行了. 所以我们可以搞出来最大的边长度不超过多少. 不过好像做这道题的大部分时间我都在梦游? 第一发代码绝壁脑残了 第一发代码居然求出了最大边的上下边界,然后枚举最大边长度跑一个DP. 不过这样是错的. 写完我就发现了=-=梦游简直.. 为什么是错的呢,因为最大边的位置不固定啊-这样转移是搞不出来结果哒. 反正之前都在梦游,想缩复杂度却强行多了个n/4的循环? 所以还是别想太多辣,直接f[i]

[BZOJ1600] [Usaco2008 Oct] 建造栅栏

Description 勤奋的Farmer John想要建造一个四面的栅栏来关住牛们.他有一块长为n(4<=n<=2500)的木板,他想把这块本板切成4块.这四块小木板可以是任何一个长度只要Farmer John能够把它们围成一个合理的四边形.他能够切出多少种不同的合理方案.注意: *只要大木板的切割点不同就当成是不同的方案(像全排列那样),不要担心另外的特殊情况,go ahead. *栅栏的面积要大于0. *输出保证答案在longint范围内. *整块木板都要用完. Input *第一行:一

【题解】[Usaco2008 Oct]建造栅栏

其实这也算不上什么题解,简单说一下思路 由于三角形任意两边之和大于第三边 可知四边形任意三遍之和大于第四遍(啥逻辑) 我们可以先用这个思路的代码: #include <iostream> #include <cstdio> using namespace std; int n, l, ans; int main() { cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n - i; j

bzoj 1602 [Usaco2008 Oct]牧场行走(LCA模板)

1602: [Usaco2008 Oct]牧场行走 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 379  Solved: 216[Submit][Status][Discuss] Description N头牛(2<=n<=1000)别人被标记为1到n,在同样被标记1到n的n块土地上吃草,第i头牛在第i块牧场吃草. 这n块土地被n-1条边连接. 奶牛可以在边上行走,第i条边连接第Ai,Bi块牧场,第i条边的长度是Li(1<=Li<=1

BZOJ 1599: [Usaco2008 Oct]笨重的石子( 枚举 )

直接枚举 ------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ;  i < n ; ++i ) #define clr( x ,

BZOJ 1602: [Usaco2008 Oct]牧场行走( 最短路 )

一棵树..或许用LCA比较好吧...但是我懒...写了个dijkstra也过了.. ---------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<queue> #include<cstring> #include<iostream> #define rep( i ,

BZOJ——1601: [Usaco2008 Oct]灌水

http://www.lydsy.com/JudgeOnline/problem.php?id=1601 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2156  Solved: 1416[Submit][Status][Discuss] Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. 建造一个水库需要花费

BZOJ 1601: [Usaco2008 Oct]灌水( MST )

MST , kruskal 直接跑 ---------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<vector> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i <

BZOJ 1602: [Usaco2008 Oct]牧场行走

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1602 解:lca的模板,我用的是倍增. 程序: #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; struct ding{ int to,next,val; }edge[2010]; int n,q,f[1010][