[Offer收割] 编程练习赛1
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的更多相关文章
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
- [Offer收割]编程练习赛48
题目1 : 折线中点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一条折线. 请你求出这条折线的 ...
- [Offer收割]编程练习赛3 - 题目3 : 智力竞赛
智力竞赛 Problem's Link ---------------------------------------------------------------------------- Mea ...
- [Offer收割]编程练习赛5-1 小Ho的防护盾
#1357 : 小Ho的防护盾 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星 ...
- hiho #1272 买零食 [Offer收割]编程练习赛2
#1272 : 买零食 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰 ...
- hiho #1283 hiho密码 [Offer收割]编程练习赛3
#1283 : hiho密码 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的 ...
随机推荐
- duilib 新增数据迁移界面
xml界面配置: <?xml version="1.0" encoding="utf-8"?> <Window caption="0 ...
- Selenium 3 学习小结
4个类+常用的46个方法 从以下知识内容对selenium 3自动化框架进行初步学习: 1.安装selenium pip install selenium pip list 2.驱动.关闭浏览器 首先 ...
- CSS3属性上调
一.为什么使用CSS 1.有效的传递页面信息 2.使用CSS美化过的页面文本,使页面漂亮.美观,吸引用户 3.可以很好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 4.具有良好的用户体验 二 ...
- js数组指定位置添加删除
示例参考:http://www.w3school.com.cn/jsref/jsref_splice.asp
- 防止enter提交表单
如何防止回车(enter)键提交表单,其实很简单,就一句话.onkeydown="if(event.keyCode==13)return false;"把这句写在from标签里面就 ...
- SpringBoot中使用springfox+swagger2书写API文档
随着前后端的分离,借口文档变的尤其重要,springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文 ...
- windows 启动停止 java进程
本案例以 xxx.jar 为列子 我们一般启动的jar 在任务管理器中查看进程都是javaw.exe ,无法用命令来 kill,所以我们得给自己的java 进程设置个新 title 1: 首先 ...
- NOIP2018 游记 QAQ
写在前面: 本人初三党.NOIP前两个月不好好停课搞信竞愣是要搞文化课.于是,期中考与NOIP一起凉凉[微笑] 本人写的第一篇NOIP游记,各位大佬们随便看一看就好 Day -n 初赛71,竟然跟wx ...
- 汇编-13.0-int指令
1.int指令 int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程. 执行int n指令,相当于引发一个中断号为n的中断过程. (1).取中断类型码n: (2).标志寄存器入栈,I ...
- 关于SQL配置管理工具无法打开0x8004100e问题!
今天犯了个很“2”得问题,因为在远程数据库可以访问,并且也在安装程序中有看到装有SQLserver Mamngement Studio及其它程序,所以想在本地使用数据库应该可以但没想却总是报SQL配置 ...