【刷水】之USACO2008资格赛(Bzoj1599-1603)

做之前真是没想到有这么水>.<

但做了还是发上来吧>.<

就当是刷一刷AC量&1A率什么的>.<

Bzoj1599: [Usaco2008 Oct]笨重的石子

枚举。。

 1 #include<cstdio>
 2 int a,b,c;
 3 int t[100];
 4
 5 int main(){
 6     scanf("%d%d%d",&a,&b,&c);
 7     for(int i=1;i<=a;i++)
 8         for(int j=1;j<=b;j++)
 9             for(int k=1;k<=c;k++)
10                 t[i+j+k]++;
11     int ans=0,ansx=0;
12     for(int i=3;i<=a+b+c;i++)
13         if(t[i]>ans) ans=t[i],ansx=i;
14     printf("%d\n",ansx);
15     return 0;
16 }

Bzoj1600: [Usaco2008 Oct]建造栅栏

组成四边形的充要条件是三边之和大于第四边

也就是任意一边不超过总长的一半(N边形也适用)

然后枚举一下第二次切在哪,两边讨论一下得出这种情况的贡献

时间O(n),空间O(1)

网上的题解貌似都是背包,但那样就是n^2了。。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,lim,ans;
 5
 6 int main(){
 7     scanf("%d",&n);
 8     lim=(n+1)/2;
 9
10     for(int i=2;i<=n-2;i++){
11         int a=lim,b=i-lim,c=i+lim,d=n-lim;
12         a=min(i,a),c=min(n,c);
13         b=max(0,b),d=max(i,d);
14         ans+=(a-b-1)*(c-d-1);
15     }
16     printf("%d\n",ans);
17     return 0;
18 }

Bzoj1601: [Usaco2008 Oct]灌水

这道题以前做了,新加一个点然后最小生成树。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=305;
 5
 6 int p[maxn];
 7 int find(int x){return p[x]==x?x:p[x]=find(p[x]);}
 8 struct edge{
 9     int u,v,w;
10     bool operator <(const edge&a)
11         const {return w<a.w;}
12 }e[maxn*maxn+maxn];
13 int n,k;
14
15 int main(){
16     scanf("%d",&n);
17     for(int i=0;i<=n;i++) p[i]=i;
18     int w;
19
20     for(int i=1;i<=n;i++){
21         scanf("%d",&w);
22         e[++k].u=0,e[k].v=i;
23         e[k].w=w;
24     }
25     for(int i=1;i<=n;i++)
26         for(int j=1;j<=n;j++){
27             scanf("%d",&w);
28             e[++k].u=i,e[k].v=j;
29             e[k].w=w;
30         }
31     sort(e+1,e+k+1);
32
33     long long ans=0;
34     for(int i=1;i<=k;i++){
35         int x=find(e[i].u),y=find(e[i].v);
36         if(x!=y) p[x]=y,ans+=e[i].w;
37     }
38
39     printf("%lld\n",ans);
40     return 0;
41 }

Bzoj1602: [Usaco2008 Oct]牧场行走

模板题,复习倍增。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=1e3+5;
 5 int n,q;
 6
 7 int head[maxn],e[maxn*2],w[maxn*2],nxt[maxn*2],k;
 8 int adde(int u,int v,int g){
 9     e[++k]=v;w[k]=g;nxt[k]=head[u];head[u]=k;
10     e[++k]=u;w[k]=g;nxt[k]=head[v];head[v]=k;
11 }
12 int dep[maxn],dist[maxn],p[maxn][10];
13
14 int dfs(int u){
15     for(int i=1;i<10;i++)
16         p[u][i]=p[p[u][i-1]][i-1];
17     for(int i=head[u];i;i=nxt[i]){
18         int v=e[i];
19         if(v==p[u][0]) continue;
20         dist[v]=dist[u]+w[i];
21         dep[v]=dep[u]+1;
22         p[v][0]=u;
23         dfs(v);
24     }
25 }
26
27 int lca(int u,int v){
28     if(dep[u]<dep[v]) swap(u,v);
29     int del=dep[u]-dep[v];
30     for(int i=0;i<10;i++)
31         if(del&(1<<i)) u=p[u][i];
32     if(u==v) return v;
33     for(int i=9;i>=0;i--)
34         if(p[u][i]!=p[v][i])
35             u=p[u][i],v=p[v][i];
36     return p[u][0];
37 }
38
39 int main(){
40     scanf("%d%d",&n,&q);
41     int u,v,g;
42     for(int i=1;i<n;i++)
43         scanf("%d%d%d",&u,&v,&g),
44         adde(u,v,g);
45
46     dfs(1);
47
48     for(int i=1;i<=q;i++){
49         scanf("%d%d",&u,&v);
50         printf("%d\n",dist[u]+dist[v]-2*dist[lca(u,v)]);
51     }
52     return 0;
53 }

Bzoj1603: [Usaco2008 Oct]打谷机

顺序并不会影响什么,然后直接来。。

 1 #include<cstdio>
 2 int n,a,b,c,ans;
 3 int main(){
 4     scanf("%d",&n);
 5     for(int i=1;i<n;i++){
 6         scanf("%d%d%d",&a,&b,&c);
 7         ans^=c;
 8     }
 9     printf("%d\n",ans);
10     return 0;
11 }

也不知道做这些题意义何在

然而玩水真是欢乐

时间: 2024-10-10 04:29:35

【刷水】之USACO2008资格赛(Bzoj1599-1603)的相关文章

北京赛车技巧8码滚雪球公式探讨交流+走势分析法刷水教程

此文章是适合5-8码的玩家去下注.(内附冷热原理讲解) 及需要无解刷水方法的直接找我,在这里重申一遍,此教程免费 本人任何方法是以走势冷热原理去研究出的一套方法,明白原理,方法就可以千变万化 任何人以我名义及盗版此文章去招摇撞骗充当高手的都是骗子 本人唯一企鹅号:183468628(蜂蜜柚子茶) 走势无非是热码的一个延伸, 只有明白冷热原理,才能够真正去掌握. (PS:解释一下,具我对走势的熟悉,本人认为完全没有公式计算方法,因为公式是死的,而走势不可能每天都一样,特别注意的是,走势无非是热码的

刷水题(二)

今天,我又去刷水题了.水题好多呀!这些题分为N个难度级别,做出第i个难度级别的任意一题都需要a[i]分钟,并获得b[i]点积分.我最多可以刷T分钟水题,问我最多能获得多少积分? [输入] 第一行两个正整数N和T,接下来的N行每行两个正整数数a[i]和b[i]. [输出] 一个数,表示我最多可以获得的积分. [样例输入] 4 50 1 10 3 40 9 130 27 400 [样例输出] 720 题解: 直接上代码(没错,就是这么简单) 1 #include<iostream> 2 using

刷水题记(1)

嗯,看到最近yyl大神刷了很多题(lzw大神也是),于是我翻开他们的记录,轻轻点开他们刷过的题(这句话似曾相识?)妈旦这么水的题我竟然没过!!!,然后有了这篇文. 第一题,最大连续子序列之和 良心锑星题,然后我很开心的把它艹过去了嗯. #include <cstdio> int f,i,j,n,m,p; int main(){ m=1<<31; scanf("%d",&n); for(i=0;i<n;++i){ scanf("%d&quo

NOIP前刷水行动

2016.11.10 BZOJ1592 Usaco2008 Feb]Making the Grade 路面修整:离散+DP BZOJ1051 HAOI 受欢迎的牛 :tarjan BZOJ2442 修建草坪 :单调队列优化DP BZOJ3890 Meeting time : 分层DP BZOJ4390 Max Flow :树上差分 BZOJ4525 :二分答案判定 BZOJ4511 :DP 1 BZOJ1592 2 3 #include<iostream> 4 #include<algo

刷水题 堆

题目背景 众所周知,熊本熊的洛谷大号是kakakaka.有的时候熊本熊会在洛谷上面刷水题,但是熊本熊并不知道该怎么计划好自己的时间,他想让你来帮他计划一下. 题目大意 熊本熊今天一时兴起想刷n道水题,熊本熊有m个大脑,每个大脑都只能独立工作,也就是说,熊本熊可以在同一时间做m道题.由于熊本熊刷的水题都是topcoder,codeforces,usaco,CCF上最新出的水题,所以在熊本熊刷一道水题时,下一道水题可能还没有出来.又因为熊本熊又不会什么奇技淫巧,所以他完成每一道题都有一个特定的时间.

刷水题记(2)

看了看提交记录,有一堆小高一在做题... 然后开始快乐地刷那些我没有刷过的水题啦啦啦~~ 第一题 蟠桃记 恩简单递推. #include <cstdio> int main(){ int a,i,n; scanf("%d",&n); a=1; for(i=1;i<n;++i) a=(a+1)<<1; printf("%d\n",a); return 0; } 第二题 得票查询 一个个数过来,真·良心水题推荐 #include &

OI刷水记录

3.19 颓了一周: **3211: 花神游历各国 区间开方区间查询 可以用树状数组暴力修改+并查集维护下一个不为1的数 #include<bits/stdc++.h> #define rep(i,l,r) for(int i=l;i<=r;i++) #define N 101333 typedef long long ll; int f[N],a[N],now,m,n,l,r,x,delta; ll c[N]; inline void add(int x,int k){while(x&

【一堆的背包水题】沉迷于刷水无可救药~

我在干嘛,连普及组都不会考这种题.以三四分钟一道题的速度混了一下BZOJ的题目数量. BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草 裸的01背包. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int MAXN=5000+5; 4 const int MAXC=50000+50; 5   6 int main() 7 { 8     int c,h,v[MAXN],f[MAXC]; 9

bzoj 刷水

bzoj 3856: Monster 虽然是sb题,,但是要注意h可能<=a,,,开始忘记判了WA得很开心. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 long long h, a, b, k; 8 int main(){ 9