【USACO2.1】解题报告

USACO4.1.2Fence Rails栅栏的木料解题报告 描述: 农民John准备建一个栅栏来围住他的牧场。他已经确定了栅栏的形状,但是他在木料方面有些问题。当地的杂货储存商扔给John一些木板,而John必须从这些木板中找出尽可能多所需的木料。 当然,John可以切木板。因此,一个9英尺的木板可以切成一个5英尺和一个4英尺的木料 (当然也能切成3个3英尺的,等等)。John有一把(完美的)梦之锯,因此他在切木料时,不会有木料的损失。 阅读详情

前言

USACO2.1主要内容是图论。其中有几道题是要用深搜做的。而另外几道题则是利用模拟的方法来完成简单图论。
总体来说难度还是比较小的,算是最基础的算法吧。
UASCO:http://train.usaco.org


2.1.3.The Castle

题解


2.1.4.Ordered Fractions

思路:

可以枚举分子和分母,然后判断他们的最小公约数是不是 1 1 1(其实就是判断是否互质)。如果是的话就将这个分数加入到结构体里面,储存三个变量:

  • 分子 Z Z Z
  • 分母 M M M
  • 这个分数的值 n u m num num(实数类型)

然后按照分数值排序输出即可。

代码:
/*
ID:ssl_zyc2
TASK:frac1
LANG:C++
*/

#include <cstdio>
#include <algorithm>
using namespace std;

int n,sum;

struct node
{
    int z,m;
    double num;
}a[160*160+10];

bool cmp(node x,node y)
{
    return x.num<y.num;
}

int main()
{
    scanf("%d",&n);
    a[++sum].z=0;
    a[sum].m=1;
    a[sum].num=0;  //分子为0的唯一情况先打上
    for (int i=1;i<=n;i++)
     for (int j=1;j<=i;j++)
      if (__gcd(i,j)==1)  //互质
      {
      	 a[++sum].z=j;
      	 a[sum].m=i;
      	 a[sum].num=(double)j/(double)i/1.0;
      }
    sort(a+1,a+1+sum,cmp);  //排序
    for (int i=1;i<=sum;i++)
     printf("%d/%d\n",a[i].z,a[i].m);
    return 0;
}

2.1.5.Sorting a Three-Valued Sequence

思路:

这道题有点恶心。
读入 a [ i ] a[i] a[i],将 a [ i ] a[i] a[i]排好序后为 b [ i ] b[i] b[i],然后从前往后扫,如果 a [ i ] ! = b [ i ] a[i]!=b[i] a[i]!=b[i]就说明这个 a [ i ] a[i] a[i]的位置是错误的。那么要分情况。

  1. 先到 a [ i ] a[i] a[i]本来应该在的位置,如果这个位置中有为本来应该在a[i]位置的数字,那么就交换两个数字,一次交换就满足了两个数字。
  2. 如果这个位置中没有为本来应该在a[i]位置的数字,那么就随便找一个要到 a [ i ] a[i] a[i]位置来的数字交换,一次交换只满足了一个数字。

模拟即可。

代码:
/*
ID:ssl_zyc2
TASK:sort3
LANG:C++
*/

#include <cstdio>
#include <algorithm>
using namespace std;

int n,a[1010],b[1010],cnt;
bool ok;

int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        b[i]=a[i];
    }
    sort(b+1,b+1+n);
    for (int i=1;i<=n;i++)
     if (a[i]!=b[i])  //不相同
     { 
     	ok=false;
     	for (int j=i+1;j<=n;j++)
     	 if (a[i]==b[j]&&a[j]==b[i])   //情况1
     	 {
     	 	swap(a[i],a[j]);
     	 	cnt++;
     	 	ok=true;
     	 	break;
         }
        if (!ok)  //情况2
         for (int j=n;j>i;j--)
          if (a[j]==b[i]) 
          {
          	 swap(a[i],a[j]);
          	 cnt++;
          	 break;
          }
     }
    printf("%d\n",cnt);
    return 0;
}

2.1.6.Healthy Holsteins

思路:

深搜枚举每一个饲料,判断买或者不买。最终取答案最小值即可。
当然如果你英勇一点的话就随机选择那些饲料,多随机几次取最有答案。如果运气好的话应该也是可以过的。

代码:
#include <cstdio>
#include <algorithm>
using namespace std;

int n,m,need[30],sum[30],f[20][30],used[30];

struct node
{
    int ans;
    int used[30];
}ans;

bool check(int k)
{
    for (int i=1;i<=n;i++)
     if (sum[i]<need[i]) return 0;
    if (k<ans.ans) return 1;
    if (k>ans.ans) return 0;  //取最小值
    sort(used+1,used+1+k);
    for (int i=1;i<=k;i++)
     if (used[i]<ans.used[i]) return 1;
     else if (used[i]>ans.used[i]) return 0;
}

void dfs(int x,int s)
{
    if (x>m)
    {
        if (check(s))   //成立
        {
            ans.ans=s;
            for (int i=1;i<=s;i++)
             ans.used[i]=used[i];
            sort(ans.used+1,ans.used+1+s);  //排序
        }
        return;
    }
    dfs(x+1,s);
    used[s+1]=x;
    for (int i=1;i<=n;i++)
     sum[i]+=f[x][i];
    dfs(x+1,s+1);
    used[s+1]=0;
    for (int i=1;i<=n;i++)
     sum[i]-=f[x][i];
}

int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
     scanf("%d",&need[i]);
    scanf("%d",&m);
    for (int i=1;i<=m;i++)
     for (int j=1;j<=n;j++)
      scanf("%d",&f[i][j]);
    ans.ans=1e9;
    dfs(1,0);
    printf("%d",ans.ans);
    for (int i=1;i<=ans.ans;i++)
     printf(" %d",ans.used[i]);
    printf("\n");
    return 0;
}
//我这种方法很麻烦,应该有更简单的方法的。

2.1.7.Hamming Codes

思路:

深搜枚举每一位数是 0 0 0还是 1 1 1,搜完一个答案后将它和前面的所有答案进行比较,如果都满足要求就记录下这个答案。最后输出时再转换成十进制即可。

代码:
/*
ID:ssl_zyc2
TASK:hamming
LANG:C++
*/

#include <cstdio>
using namespace std;

int n,m,k,ans[70][10],a[10],sum;

void check()
{
	for (int i=1;i<=sum;i++)
	{
		int cnt=0;
		for (int j=1;j<=m;j++)
		 if (a[j]!=ans[i][j]) cnt++;  //不同的位数个数
		if (cnt<k) return;  //不满足要求
	} 
	sum++;
	for (int i=1;i<=m;i++)
	 ans[sum][i]=a[i];  //记录答案
}

void dfs(int x)
{
	if (x>m)  //选择完了
	{
		check();
		return;
	}
	dfs(x+1);  //这一位是0
	if (sum>=n) return; 
	a[x]=1;
	dfs(x+1);  //这一位是1
	if (sum>=n) return;
	a[x]=0;
}

int main()
{
	freopen("hamming.in","r",stdin);
	freopen("hamming.out","w",stdout);
	scanf("%d%d%d",&n,&m,&k);
	sum=1;
	dfs(1);
	for (int i=1;i<=n;i++)
	{
		int s=0,l=0;
		for (int j=m;j>=1;j--)
		{
			s+=(1<<l)*ans[i][j];  //转换成十进制
			l++;
		}
		if (i%10==1) printf("%d",s);
		else if (i%10==0) printf(" %d\n",s);
		else printf(" %d",s);  //USACO神奇的输出要求
	}
	if (n%10) printf("\n");  //USACO神奇的输出要求(末尾必须换行)
	return 0;
}
USACO试题英文原题、译题及相应题解 其中包含了USACO前些年的月赛试题和部分试题的数据,部分试题的详细题解,英文原题目与翻译后的题目,与题解一一对应 立即下载

相关推荐

VScode利用EIDE和cortex-debug进行stm32开发(也适用51)

你是否因为keil页面太丑而烦恼,你是否因为keil编译太慢而恼怒,ok阿,今天也是给大家带来怎么在vscode上进行stm32的编程(我不会告诉你,我搞了好几天才搞好的💔💔💔)为什么是简单介绍?因为太啰嗦了,我嫌麻烦😋,大家可以去EIDE的官方文档去看。

weixin_73952614的博客 9382

ESP32芯片信息读取:从eFuse、MAC到Flash的硬件自检指南

在嵌入式开发中,准确获取芯片硬件信息是设备稳定运行的前提。很多开发者只调用API却不了解底层存储机制,导致MAC地址冲突、Flash容量不匹配等隐蔽问题。实际上,芯片信息并非集中存放,而是散布在eFuse、SPI Flash和ROM等不同硬件单元中,各自拥有独立的读取方式与语义。掌握eFuse的一次性编程特性、MAC地址的派生规则以及Flash容量的真实读取方法,能够有效规避量产阶段的地址重复与启动崩溃风险。基于ESP-IDF提供的esp_chip_info、esp_read_mac、esp_flash_g

weixin_34166847的博客 419

ZYNQ烧写程序到flash

1.打开SDK创建FBSl项目 点击finish 2.创建BootImage 导入fsbl.elf、.bin、.elf三个文件,Create Image 生成BOOT.bin文件 3.将BOOT文件烧录到FLASH image File选择2中生成的BOOT.bin文件,FSBL File选择fsbl.elf文件,连接好ZYNQ的Jtag,点击Program,即可烧录。 4.烧录程序到FLASH失败 如果是第一次烧录,需更改创建的fsbl工程下的main函数,在如下代码处加入BootModeRegi

qq_40603614的博客 8306

USACO:2.1.4 Healthy Holsteins 健康的好斯坦奶牛

2.1.4 Healthy Holsteins 健康的好斯坦奶牛 一、题目描述 农民JOHN以拥有世界上最健康的奶牛为傲。他知道每种饲料中所包含的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少。 给出牛所需的最低的维他命量,输出喂给牛需要哪些种类的饲料,且所需的饲料剂量最少。 维他命量以整数表示,每种饲料最多只能对牛使用一次

蓝e的专栏 2874

Oracle 11g RAC 节点通信故障排查与修复指南

本文详细介绍了Oracle 11g RAC集群发生节点通信故障时的系统性排查与修复方法。当出现节点异常重启时,核心问题往往源于心跳网络中断。文章提供了从快速诊断、日志分析到六层深度检查的完整指南,并给出了针对网络配置、内核参数及Oracle已知Bug等常见根因的实战解决方案,帮助DBA快速恢复集群稳定。

weixin_29246195的博客 271

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2501

洛谷 P1219 八皇后

题目: 一个如下的 6×6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列2\ 4\ 6\ 1\ 3\ 5246135来描述,第ii个数字表示在第ii行的相应位置有一个棋子,如下: 行号1\ 2\ 3\ 4\ 5\ 6123456 列号2\ 4\ 6...

xiaolan7777777的博客 714

以TMS320F28069为例,如何使用CCS建立DSP工程文件

以TMS320F28069为例,本文主要介绍了使用CCS建立DSP工程的流程

Honglong 2554

[USACO2.1] 三值的排序 乱搞

传送门:嘿原题在这 用一个num[][]数组记录应该在i位置的j有多少个,然后每次发现i在j中,j在i中的情况这种两个数的位置调换的情况,只需交换一次(min(num[i][j],num[j][i])),剩下的都是三个数位置调换的,这种情况需要交换3次 //USACO2.1 三值的排序 //by dadatu #include #include #include #include using

Mininda 475

QGIS中高效处理CAD数据的两种实用技巧

本文详细解析了在QGIS中高效处理CAD数据的两种核心方法。针对DWG/DXF文件在QGIS中直接打开失败的问题,介绍了使用QGIS内置数据导入管理器进行标准化转换的流程,并重点推荐了功能更强大的Another DXF Importer插件,以更好地保留文字、块属性等复杂信息。文章对比了两种方法的优劣与适用场景,并提供了坐标系设置、中文乱码等常见问题的避坑指南,帮助用户根据数据需求选择最佳导入策略。

weixin_28363123的博客 117

基于APDL语言的结构优化设计

同理,二次微分值称为二阶值。通俗地讲优化分析,指的找到一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。设计方案的任何方面都是可以优化的,比如说:尺寸(如厚度),形状(如过渡圆角的大小),支撑位置,制造费用,自然频率,材料特性等。完成分析文件的建立后,就可以进行优化分析了,如果在交互方式下进行优化的话,最好先在ANSYS数据库中用分析文件建立参数,其优点有:初始参数可以作为一阶分析方法的起点,且对于优化过程参数在数据库中可以在GUI下进行操作,便于定义优化变量。

m0_73816777的博客 1174

【USACO1.2】解题报告

前言 以后将会不定期刷USACO的题目。每做完一小章会写一份解题报告。这一小章里面较简单或者并不是很重要的题目就会直接放在里面。而比较重要的题目就会单独写博客,在这里面放链接。 这一章很简单,全部都是很基础的题目。就直接在这里面一笔带过。 USACO:http://train.usaco.org 1.2.1.Submitting Solutions 思路: 没啥好说的。 代码: /* ID:ss...

stoorz 483

Android 12,通过JNI写framebuff实现白板书写加速

Android 书写加速

448313096@qq.com 1203

USACO1.2 Name That Number 解题报告

解题思考顺序: Attempt:很简单的把字典读进去了顺序查找,然后又很天真的把数字用递归进行了全排列,自己在本机上实验的结果很理想。。可是悲剧的就是严重超时! Attempt:后来试着不用递归求出全排列,貌似还是很困难的。。卡住了很久很久。。至今没有编出来,还是代码能力不行 Attempt:我在别人的解题报告中也发现了有同样超时的问题,他也试过,二分查找字典也是很慢的,同样超时。。。

Panda_Ming 616

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

USACO2.2.1 Preface Numbering 序言页码 解题报告(模拟)

Description   一类书的序言是以罗马数字标页码的。传统罗马数字用单个字母表示特定的数值,以下是标准数字表: I 1 L 50 M 1000 V 5 C 100 X 10 D 500 最多3个同样的可以表示为10n的数字(I,X,C,M)可以连续放在一起,表示它们的和: III=3 CCC=300 可表示为5x10n的字符(V,L,D)从不连续出现。 除了下一...

bestsort 376

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

USACO2.4.1 The Tamworth Two 两只塔姆沃斯牛 解题报告(模拟)

2.4.1 The Tamworth Two 两只塔姆沃斯牛 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 18  Solved: 14 [Submit][Status][Discuss] Description 两只牛在森林里故意走丢了。农民John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。 追击在10x10的...

bestsort 478

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

USACO Section1.2 Greedy Gift Givers 翻译&解题报告

Task 'gift1': Greedy Gift GiversA group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided to exchange gifts of money. Each of these friends might or might not give some money to some or all of th...

竹喧的博客 729

USACO 1. 2 Friday the Thirteenth 翻译&amp;解题报告

Is Friday the 13th really an unusual event?That is, does the 13th of the month land on a Friday less often than on any other day of the week? To answer this question, write a program that will compute...

竹喧的博客 395

USACO Section1.2 Milking Cows 解题报告

    milk2解题报告—— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------【题目】   N个农民,每个农...

weixin_30667649的博客 143

usaco1.2.1 解题报告

题目来自acmore长沙理工oj 题目链接:http://www.acmore.net/problem.php?cid=1000&pid=0 题目描述:给定n个工人的工作时间,计算出最长的连续工作时间和空闲时间; 解题思路:对n个工人的工作时间的起点进行排序,然后依次遍历如果 第i 个 工人的工作起始时间< 第 i-1 个工人的工作结束时间,更新thou(临时工作结束时...

weixin_30323961的博客 157

USACO Section 1.2解题报告

T1 命名那个数字 Name That Number 题意 每个数字上都有一些字母,类似手机按键

GOODPLACE 310

USACO Section2.1 The Castle 解题报告

    castle解题报告—— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------【题目】   有N×M的矩阵...

weixin_30505485的博客 152

USACO Section1.2 Name That Number 解题报告

    namenum解题报告—— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------【题目】   你有一个手机...

weixin_30877227的博客 131

USACO 5.1&5.2解题报告

Fencing the Cows题目翻译:http://www.nocow.cn/index.php/Translate:USACO/fc凸包模板题,用Graham扫描法解决。Starry Night题目翻译:http://www.nocow.cn/index.php/Translate:USACO/starry搜索题,每发现一个星座便使用Floodfill算法找出完整星座并与已发现星座比对,若无符

SmallSXJ的博客 553

USACO2.1.5 Hamming Codes 海明码 解题报告(枚举)

Description 给出 N,B 和 D:找出 N 个编码(1 &lt;= N &lt;= 64),每个编码有 B 位(1 &lt;= B &lt;= 8),使得两两编码之间至少有 D 个单位的“海明距离”(1 &lt;= D &lt;= 7)。“海明距离”是指对于两个编码,他们的二进制表示法中的不同二进制位的数目。看下面的两个编码 0x554 和 0x234 之间的区别(0x554 表示一...

bestsort 463

USACO Training Section 1.2 Dual Palindromes 解题报告&AC代码

解题报告: 这依然是一道可以用中规中矩方法做出来的题。 我的方法是从start扫描到最大整数(2147483647,他说了不会超的么…),判断这个数是不是“双重回文”,如果是,输出这个数,计数器(就是那个输入的N)自减。 当N == 0的时候,我们的工作也就完成啦。 至于判断的部分,从2扫描到10,对将要处理的数x转换成每一种进制分别判断(就是第i位 ==  第(n - i)位,假设K进制

堆放杂物 878
上一篇: 序列【模拟】
下一篇: 【洛谷P1025】【JZOJ5195】数的划分【DP】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值