A HihoCoder 1268 九宫

思路:

  一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果。这里我用了一个偷懒的方法(next_permutation),直接求出全排列,然后将位置一一对应。

// Asimple
#include <bits/stdc++.h>
#define debug(a) cout<<#a<<" = "<<a<<endl
#define sysp system("pause")
using namespace std;
typedef long long ll;
const int maxn = + ;
ll T, n, sum, num, m, t, len, ans;
int a[] = {, , , , , , , , };
int res[][], Map[][], temp[][]; bool check() {
if(
a[]+a[]+a[] == a[]+a[]+a[] &&
a[]+a[]+a[] == a[]+a[]+a[] &&
a[]+a[]+a[] == a[]+a[]+a[] &&
a[]+a[]+a[] == a[]+a[]+a[] &&
a[]+a[]+a[] == a[]+a[]+a[] &&
a[]+a[]+a[] == a[]+a[]+a[] &&
a[]+a[]+a[] == a[]+a[]+a[]
)
return true;
return false;
} void input() {
for(int i=; i<; i++) {
for(int j=; j<; j++) {
scanf("%d", &Map[i][j]);
}
}
int flag = ;
do{
if( check() ) {
bool f = true;
for(int i=; i<; i++) {
for(int j=; j<; j++) {
temp[i][j] = a[i*+j];
if( Map[i][j] && Map[i][j] != temp[i][j] ) {
f = false;
break;
}
}
if( !f ) break;
}
if( f ) {
if( flag == ) {
flag = ; break;
} else flag = ;
for(int i=; i<; i++) {
for(int j=; j<; j++) {
res[i][j] = temp[i][j];
}
}
}
}
if( flag == ) break;
}while( next_permutation(a, a+));
if( flag == ) printf("Too Many\n");
else {
for(int i=; i<; i++) {
for(int j=; j<; j++) {
printf("%d", res[i][j]);
if( j == ) printf("\n");
else printf(" ");
}
}
}
//sysp;
} int main() {
input();
return ;
}
B HihoCoder 1269 优化延迟

思路:

  看到题目,第一眼就看到了给出的运行时间10s,果断一发暴力TLE。随后仔细看了下题目,发现当K越大,得出的结果也就越小,这个不是裸二分吗,然后直接上手,wa10+次,最后才发现自己的get_sp竟然是返回int,还以为是自己的二分有问题,改了好几版,-_-||。补充一下,k为什么不能为0呢?虽然为0时相当于没加缓冲。

// Asimple
#include <bits/stdc++.h>
#define debug(a) cout<<#a<<" = "<<a<<endl
#define sysp system("pause")
using namespace std;
typedef long long ll;
const int maxn = + ;
ll T, n, sum, num, m, t, len, ans;
ll a[maxn]; ll get_sp(int cnt) {
priority_queue<ll> q;
ll sp = , c = , v;
int i = ;
while( !q.empty() || i < n ) {
while( q.size()<cnt && i<n ) q.push(a[i++]);
v = q.top(); q.pop();
sp += c*v;
c ++;
if( sp > num ) return num + ;
}
return sp;
} void input() {
scanf("%lld %lld", &n, &num);
ll sp = ; ans = -;
for(int i=; i<n; i++) scanf("%lld", &a[i]);
ll low = , high = maxn;
while( low <= high ) {
ll mid = (low+high)/;
if( get_sp(mid)<=num ) {
ans = mid;
high = mid-;
}
else low = mid+;
}
printf("%lld\n", ans);
//sysp;
} int main() {
input();
return ;
}

附上自己wa的截图:

C HihoCoder 1270 建造基地
 思路:
  这道题不由的让我想起了当初做区域赛的网络赛的场景,这完全是道读题目的题,题目看懂了其实还挺简单的。
简单来说就是一个类完全背包的问题,每一层在修建的时候都是在要花最小的代价去满足建筑值。当一层修建完成之后,便是将金属的建筑值更新。
// Asimple
#include <bits/stdc++.h>
#define debug(a) cout<<#a<<" = "<<a<<endl
#define sysp system("pause")
using namespace std;
typedef long long ll;
const int maxn = + ;
const ll INF = <<;
const ll mod = ;
ll T, n, sum, num, m, t, len, ans, k;
ll dp[maxn], a[maxn], b[maxn]; void input() {
while( cin >> T ) {
while( T -- ) {
ans = ;
cin >> n >> m >> k >> t;
for(int i=; i<=m; i++) cin >> a[i];
for(int i=; i<=m; i++) cin >> b[i];
for(int u=; u<=n; u++) {
for(int i = ; i<maxn; i++) dp[i] = INF;
dp[] = ;
for(int i=; i<=m; i++) {
for(int j=; j<=k; j++) {
if( j + b[i] > k ) dp[k] = min(dp[k], dp[j] + a[i]);
else dp[j+b[i]] = min(dp[j+b[i]], dp[j] + a[i]);
}
}
ans += dp[k];
for(int v=; v<=m; v++) b[v] /= t;
}
if( ans >= INF ) cout << "No Answer" << endl;
else cout << ans << endl;
}
}
//sysp;
} int main() {
input();
return ;
}
D HihoCoder 1271 舰队游戏

暂无思路。看了题解说是用贪心+状压过,状态压缩是个好东西,可惜我不会。

AC博客1:https://blog.csdn.net/qq_32400847/article/details/51087220

AC博客2:https://blog.csdn.net/tc_to_top/article/details/50825418

[Offer收割] 编程练习赛1的更多相关文章

  1. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  2. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  3. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  4. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  5. HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)

    描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...

  6. [Offer收割]编程练习赛48

    题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...

  7. [Offer收割]编程练习赛3 - 题目3 : 智力竞赛

    智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...

  8. [Offer收割]编程练习赛5-1 小Ho的防护盾

    #1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...

  9. hiho #1272 买零食 [Offer收割]编程练习赛2

    #1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...

  10. hiho #1283 hiho密码 [Offer收割]编程练习赛3

    #1283 : hiho密码 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的 ...

随机推荐

  1. openlayers3 基础(常见方法,类及实现)

    ol3接口大全1.ol.Map类:(地图容器类) 实现: ol.Map(参数) 参数说明:1.1 target,说明地图所在的html元素. 如果没有指定,必须调用ol.Map类的setTarget( ...

  2. Lombok 介绍

    Lombok使用 介绍 在项目中使用Lombok可以减少很多重复代码的书写.比如说getter/setter/toString等方法的编写. IDEA中的安装 打开IDEA的Setting –> ...

  3. js对重复数组去重

    var arr=[1,1,1,1,2,2,2,3,3,4,1,4,5,7,8,7,7] let m = {} arr.filter(item => m[item] >= 1 ? false ...

  4. 2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或E ...

  5. Redis集群概述

    Redis Cluster与Redis3.0.0同时发布,以此结束了Redis无官方集群方案的时代,目前,Redis已经发布了3.0.7版本. redis cluster是去中心化,去中间件的,也就是 ...

  6. SpringCloud第六步:搭建分布式配置中心

    什么是配置中心 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud con ...

  7. Centos7 初始化硬盘分区、挂载

    1.通过命令fdisk-l查看硬盘信息 可以看到有两块硬盘/dev/vda和/dev/vdb,启动vda是系统盘vdb是我们新增的数据盘. 2.执行以下命令,进入fdisk模式,开始对新增数据盘执行分 ...

  8. cdh安装spark遇到的几个BUG

    spark安装后启动: [zdwy@master spark]$ sbin/start-all.sh starting org.apache.spark.deploy.master.Master, l ...

  9. C/C++ 获取系统时间 到秒 || 到毫秒

    string getNowSysTime(string &outPut) { ] = {}; struct timeval tv; struct timezone tz; struct tm ...

  10. 北京大学Cousera学习笔记--8-计算导论与C语言基础--C的运算部分

    赋值运算符 1.两边类型不同:赋值时要进行类型转换,右边要转换到左边 2.长数赋值短数 最后的部分截断赋值给短数 3.短数赋给长数 数不变 4.符号位赋值 --计算机不区分符号位数字位,直接赋值 表达 ...