最近,我参加了编程比赛.有一个问题,我仍然在考虑.编程语言并不重要,但我用C++编写.任务是这样的:
如您所知,Flatland位于飞机上.Flatland有n个城市,其中i个城市位于(xi,yi)点.有AI的公民居住在第i个城市.平地之王决定将王国分配给他的两个儿子.他想以无限直线的形式建造一堵墙; 每个部分将由其中一个儿子统治.墙不能穿过任何城市.为了避免兄弟之间的嫉妒,两部分的人口必须尽可能接近; 正式地,如果a和b分别是居住在第一和第二部分城市的公民总数,则| a - b |的值.必须尽量减少.帮助国王找到最佳分工.城市数量小于1000.所有坐标都是整数.算法的输出应该是最小| ab |的整数
好吧,如果我知道线的方向,那将是非常简单的任务 - 二进制搜索: 
我不想要代码,我想要想法,因为我没有.如果我抓住了想法,我可以编写代码!
我不知道最佳方向,但我认为它可以以某种方式找到.那可以找到它还是以其他方式解决这个问题?
水平/垂直线不是最佳的示例:
1
\
\
2 \ 1
Run Code Online (Sandbox Code Playgroud) 这是来自C++测验的代码示例:
#include <iostream>
struct X {
X(const char *) { std::cout << 1; }
X(const X &) { std::cout << 2; }
X(X &&) { std::cout << 3; }
};
X f(X a) {
return a;
}
X g(const char * b) {
X c(b);
return c;
}
int main() {
f("hello");
g("hello");
}
Run Code Online (Sandbox Code Playgroud)
该计划的输出是什么?
我想是这样的:
f(X a)被调用,构造函数隐式转换const char*为X,因此输出为1g(const char*)被调用,X c(b) X(const char*) 输出为1所以答案是11.给测验的答案是131.我用g ++ 4.4.4-13得到的答案是121.
据说这段代码是用这个命令编译的: …
以下代码示例来自 cppreference 上std::launder:
alignas(Y) std::byte s[sizeof(Y)];
Y* q = new(&s) Y{2};
const int f = reinterpret_cast<Y*>(&s)->z; // Class member access is undefined behavior
Run Code Online (Sandbox Code Playgroud)
在我看来,由于标准中的[basic.life]/6,第三行将导致未定义的行为:
在对象的生命周期开始之前,但在分配对象将占用的存储空间之后...如果...指针用于访问非静态数据成员或调用非静态,则程序具有未定义的行为对象的成员函数。
为什么placement new没有开始object的生命周期Y?
好吧,我有这个任务:John的浴室地板坏了.我们有一张这个楼层的地图,其中'.' 是好板,'+'是坏板,例如:
.+++
.+.+
Run Code Online (Sandbox Code Playgroud)
在这里,我们有5个破碎板和3个好板.有两种板材,在商店出售:1x1板和2x1板.1x1板材成本A和2x1板材成本B.任务是:给出地板图,计算地板固定的最低价格.
以顶部为例:我们可以放置2个2x1板和1个1x1板.因此,价格将是A + 2*B.
我有一个想法:每个破碎的板数计算连接断板的最大长度.然后价格是长度/ 2*B +长度%2*A.
问题是,我真的不知道该怎么做.我有一些递归算法的想法,但也有那么像圈诸多问题:
+++
+.+
+++
Run Code Online (Sandbox Code Playgroud)
所以我有两个问题:
谢谢!
编辑
当2*A <B时有一些小问题,但让我们谈谈非平凡=)
/编辑
我在实验室工作并编写了多线程计算程序,在C++ 11上使用std::thread.现在我有机会在多CPU服务器上运行我的程序.
服务器:
我对多CPU编程一无所知.第一个想法,我想到了运行40个应用程序然后将它们的结果粘合在一起.这是可能的,但我想更多地了解我的机会.
谢谢!
在cmake生成makefile之后,我尝试使用自定义 gcc 编译程序。我已经完成以下工作:
CMAKE_CXX_COMPILER假设将cmake变量设置为定制路径/home/user/pkgs/bin/g++。但是,当我尝试运行程序时,它显示如下错误信息:
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found
在我看来,问题在于链接到中的旧库/usr/lib,而应该链接到cutom gcc库。
我怎样才能解决这个问题?
文件input.txt由两行组成:首先具有整数N个空格,然后具有整数K(1 ?? N,K ?? 250000)。第二个具有N个以空格为单位的整数,其中每个整数都小于或等于K。可以保证数组中从1到K的每个整数。任务是找到最小长度的子数组,其中包含所有整数。并打印其开始和结束。请注意,索引从1开始。
例子:
Input Output
5 3 2 4
1 2 1 3 2
6 4 2 6
2 4 2 3 3 1
Run Code Online (Sandbox Code Playgroud)
在最近的编程竞赛中,我承担了这项任务。结束了,我没有作弊。我已经使用python 3实现了它:
with open('input.txt') as file:
N, K = [int(x) for x in file.readline().split()]
alley = [int(x) for x in file.readline().split()]
trees = {}
min_idx = (1, N)
min_length = N
for i in range(N):
trees[alley[i]] = i
if len(trees) == K:
idx = (min(trees.values())+1, max(trees.values())+1)
length = idx[1] - idx[0] + 1 …Run Code Online (Sandbox Code Playgroud) 我有:
class A : public std::enable_shared_from_this<A>
{...};
class B : public A
{...};
void doCoolStuff(std::weak_ptr<A> obj)
{...}
void doCoolStuff(std::weak_ptr<B> obj)
{
...
doCoolStuff(std::static_pointer_cast<A>(obj.lock())); (1)
}
Run Code Online (Sandbox Code Playgroud)
然后在B函数中:
void B::doReallyCoolStuff()
{
doCoolStuff(std::static_pointer_cast<B>(shared_from_this())); (2)
}
Run Code Online (Sandbox Code Playgroud)
所以问题是:
error C2440: 'static_cast' : cannot convert from 'B *const ' to 'A *'error C2668: ambiguous call to overloaded function我不明白如何解决它们中的任何一个,因为:
构建环境:MSVS 2013 express
请帮忙.谢谢
好的,所以我在QTimer中完全迷失了.问题是:我有多线程应用程序,我需要在QTimer的超时上做一些工作.我这样做了:
QTimer* timer = new QTimer();
timer->setSingleShot(true);
connect(timer, SIGNAL(timeout()), someObject, SLOT(work()));
Run Code Online (Sandbox Code Playgroud)
这没用.有时,work()根本没有被调用,有时它在我关闭程序时被调用,有时候看起来都很正常.
所以我开始想到计时器需要线程.提供MCV示例:
class Tester : public QObject
{
Q_OBJECT
public:
Tester(QObject* par = 0) : QObject(par)
{
}
public slots:
void greet()
{
qDebug()<<"hello";
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTimer* timer1 = new QTimer();
QThread* thread = new QThread();
Tester* tester = new Tester();
timer1->setInterval(500);
timer1->setSingleShot(false);
timer1->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), timer1, SLOT(start()));
QObject::connect(timer1, SIGNAL(timeout()), tester, SLOT(greet()));
QObject::connect(timer1, SIGNAL(timeout()), timer1, SLOT(deleteLater()));
QObject::connect(timer1, SIGNAL(destroyed()), thread, SLOT(quit())); …Run Code Online (Sandbox Code Playgroud)