我四个小时前第一次问这个问题。事实上,我已经为这个问题搜索了 6 个多小时,但仍然无法理解。
这道题是给你x[n]和y[n]给你n分。您应该找到这些点的两个子集,它们的凸包相交。您的回答应该是满足上述规则的案例数。
You are given a finite set S of points in the plane. For each valid i, one of those points has coordinates (x[i], y[i]). The points are all distinct and no three of them are collinear.
Below, CH(s) denotes the convex hull of the set s: that is, the smallest of all convex polygons that contain the set s. We say that the ordered pair (s1, s2) is interesting if the following conditions are satisfied:
1.s1 is a subset of S
2.s2 is a subset of S
3.the sets s1 and s2 are disjoint (i.e., they have no elements in common)
4.the intersection of the convex hulls CH(s1) and CH(s2) has a positive area Note that some points from S may remain unused (i.e., they will be neither in s1, nor in s2). You are given the coordinates of all points: the s x and y. Please compute and return the number of interesting pairs of sets, modulo 10^9 + 7.
Examples
{1,0,-1,-1,0,1} {1,2,1,-1,-2,-1}
Returns: 14
We have 14 solutions:
s1 = {0,1,3}, s2 = {2,4,5} s1 = {0,2,3}, s2 = {1,4,5} s1 = {0,1,4}, s2 = {2,3,5} s1 = {0,2,4}, s2 = {1,3,5} s1 = {1,2,4}, s2 = {0,3,5} s1 = {0,3,4}, s2 = {1,2,5} s1 = {1,3,4}, s2 = {0,2,5} s1 = {0,2,5}, s2 = {1,3,4} s1 = {1,2,5}, s2 = {0,3,4} s1 = {0,3,5}, s2 = {1,2,4} s1 = {1,3,5}, s2 = {0,2,4} s1 = {2,3,5}, s2 = {0,1,4} s1 = {1,4,5}, s2 = {0,2,3} s1 = {2,4,5}, s2 = {0,1,3}
有很多我无法理解的解决方案,以下是其中之一。例如,ccw 有什么用?结果由两部分组成,为什么? 能否提供一些算法名称,一些关键字也可以,以便我在google上详细搜索?
这是解决这个问题的一个示例代码:
#include <vector>
#include <iostream>
using namespace std;
const long long mod=1000000007ll;
struct IntersectingConvexHull{
public:
int count(vector<int> x, vector<int> y){
int n = x.size();
long long P2[110];
P2[0]=1ll;
for(int i=1;i<=n;i++){
P2[i]=P2[i-1]*2%mod;
}
long long C[110][110];
for(int i=0;i<=n;i++){
C[i][0]=C[i][i]=1ll;
for(int j=1;j<i;j++){
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
}
long long X[100],Y[100];
for(int i=0;i<=n;i++){
X[i]=x[i];
Y[i]=y[i];
}
long long ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j)continue;
int c1=0,c2=0;
for(int k=0;k<n;k++){
if(k==i||k==j){
continue;
}
long long ccw=(X[i]-X[k])*(Y[j]-Y[k])-(Y[i]-Y[k])*(X[j]-X[k]);
if(ccw<0){
c1++;
}
else{
c2++;
}
}
if(c1>=2&&c2>=2){
ans+=((P2[c1]+mod-c1-1)%mod)*((P2[c2]+mod-c2-1)%mod)%mod;
ans%=mod;
}
}
}
long long A=0ll;
for(int i=3;i<=n;i++){
for(int j=3;j<=n-i;j++){
A+=C[n][i]*C[n-i][j]%mod;
A%=mod;
}
}
return (A+mod-ans)%mod;
}
};
最佳答案
两个集合都必须至少有三个点,船体的交点才能具有非零面积。该代码计算满足此条件的分区数减去交叉面积为零的分区数。 (P2 是二的幂。C 是二项式系数。)
当且仅当有一条线将两个凸包分开时,两个凸包的交集面积为零 (Hyperplane separation theorem)。我认为我们需要扩展这个结果,实际上,(在正确的假设下)恰好有两条线将船体分开并接触两者。
最后一个循环计算被减数。之前的计算减数是几何考虑因素的来源。代码遍历所有点对,并考虑通过它们的线,通过带符号的面积测试计算每侧的点数。它增加了从每一侧选择两个或更多点的方法的数量,从而确保,如果我们在一个船体中包含对中的第一个点,在另一个船体中包含对中的第二个点,我们得到两个船体由线支撑和分隔。
我不知道这段代码如何处理退化输入(两个重复点,三个共线点)。
关于c++ - 一个关于 IntersectingConvexHull 的 topcoder 谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564621/
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下