code jam 2014

本文解析了四道编程挑战题目:magictrick、cookies、Minesweeper 和 Deceitiful War。提供了完整的代码实现,并针对每个问题进行了讨论。其中,magictrick通过循环解决,cookies涉及数学公式计算,Minesweeper尝试使用特定布局解决问题,而Deceitiful War则关注策略选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题 magictrick 很简单,用16次循环搞定


第二题 cookies 什么玩意儿的  也比较简单

判断个不等式就行

#include <stdio.h>
#include <math.h>


int main(int argc, char *argv[])
{
FILE* in = fopen(argv[1], "r+");
FILE* out = fopen("out", "w+");
int T;
fscanf(in, "%d", &T);
for(int t = 1; t <= T; t++)
{
double C, F, X;
fscanf(in, "%lf%lf%lf", &C, &F, &X);
double k = (double)X/C - 2.0/F - 1.0;
if(k < 0.0)
k = 0.0;
int times = ceil(k);
double re = 0.0;
for(int i = 0; i < times; i++)
{
re += (double)C/(2+i*F);
}
re += (double)X/(2+times*F);
fprintf(out, "Case #%d: %.7lf\n", t, re);
}
}


第三题 Minesweeper 

这个题提交了三次都没对。想法是把所有不是雷的点集中在左下角,写成两个矩形相交的样子。

比如13 = 3 + 2 *5

可以弄成

。。。

。。。。。

。。。。。

这种。 

不知道问题出在哪儿, 求大神指教。

#include <iostream>
#include <fstream>


using namespace std;


int main(int argc, char *argv[])
{
ifstream in(argv[1]);
ofstream out("out");
int testcase;
in >> testcase;
int t = 1;
while(1)
{
start:
if(t > testcase)
break;
int R, C, M;
in >> R >> C >> M;
int left = R * C - M;
string output(C, '*');
out << "Case #" << t << ":"  << endl; 
if(left == 1)
{
for(int i = 1; i < R; i++)
out << output << endl;
output.replace(0, 1, 1, 'c');
out << output << endl;
t++;
goto start;
}
if(R == 1 && C == 1)
{
out << "c" << endl;
t++;
goto start;
}
if(R == 1)
{
out << string(M, '*') << string(left-1, '.') << 'c' << endl;
t++;
goto start;
}
if(C == 1)
{
out << 'c' << endl;
for(int i = 0; i < left - 1; i++)
out << '.' << endl;
for(int i = 0; i < M; i++)
out << '*' << endl;
t++;
goto start;
}
for(int m = 2; m <= R; m++)
{
for(int x = 2; x <= C; x++)
{
if(m * x > left)
break;
if(m * x == left)
{
for(int i = 0; i < R-m; i++)
out << output << endl;
output.replace(0, x, x, '.');
for(int i = 0; i < m-1; i++)
{
out << output << endl;
}
output.replace(0, 1, 1, 'c');
out << output << endl;
t++;
goto start;
}
for(int n = 2; n <= m; n++)
{
for(int y = 1; x + y <= C; y++)
{
if(n * y > left - m * x)
break;
if(n * y == left - m * x)
{
for(int i = 0; i < R - m; i++)
out << output << endl;
output.replace(0, x, x, '.');
for(int i = 0; i < m - n; i++)
out << output << endl;
output.replace(x, y, y, '.');
for(int i = 0; i < n-1; i++)
out << output << endl;
output.replace(0, 1, 1, 'c');
out << output << endl;
t++;
goto start;
}
}
}
}
}
out << "Impossible" << endl;
t++;
}
}


第四题 Deceitiful War.

这题也算比较简单,不过读题很费劲。 ken的策略就是从手中还剩的所有block中找出比Naomi选择的大的最小的那个,如果没有,就拿现有最小的。

Naomi deceitful的策略就是,从左到右选手里的block,如果ken手里没有比她选出来的更小的,就谎称这个block比ken的最大的稍小,骗ken用掉最大的块;如果有,就报比ken的最大的还大,那么ken就会选择最小的。

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>


using namespace std;


int main(int argc, char *argv[])
{
ifstream is(argv[1]);
ofstream os("out");
int T;
is >> T;
vector<double> naomi;
vector<double> ken;
int N;
for(int t = 1; t <= T; t++)
{
naomi.clear();
ken.clear();
is >> N;
naomi.resize(N);
ken.resize(N);
for(int i = 0; i < N; i++)
is >> naomi[i];
for(int i = 0; i < N; i++)
is >> ken[i];
sort(naomi.begin(), naomi.end());
sort(ken.begin(), ken.end());
int deceit = 0;
int nondeceit = 0;
int b = 0;
int e = N - 1;
for(int i = 0; i < N; i++)
{
if(naomi[i] < ken[b])
{
e--;
}
else
{
deceit++;
b++;
}
}
b = 0;
e = N - 1;
for(int i = 0; i < N; i++)
{
if(ken[i] > naomi[b])
{
b++;
}
else
{
nondeceit++;
e--;
}
}
os << "Case #" << t << ": " << deceit << " " << nondeceit << endl;
}
}

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值