1、给出一个包含$n$个元素的数组$x$,构造出一个有向无环图满足从节点$i$出发可以访问到的节点数为$x_{i}$。

思路:按照$x$从小到大排序。然后从前向后处理,当前节点依次与前面已经处理的节点连边。

#include <iostream>
#include <map>
#include <string>
#include <stdio.h>
#include <vector>
#include <set>
#include <algorithm>
#include <string.h>
#include <fstream>
#include <sstream>
using namespace std; const int N=555;
const int mod=998244353; int get(long long x)
{
int cnt=0;
for(int i=0;i<55;++i)
{
if(x&(1ll<<i)) ++cnt;
}
return cnt;
} class DAGConstruction
{
public:
vector <int> construct(vector <int> x)
{
const int n=(int)x.size();
long long f[55];
memset(f,0,sizeof(f));
vector<int> ans,V;
vector<pair<int,int>> p;
for(int i=0;i<n;++i)
{
f[i]=1ll<<i;
p.push_back(make_pair(x[i],i));
}
sort(p.begin(),p.end());
for(int i=0;i<(int)p.size();++i)
{
int c=p[i].first;
int u=p[i].second;
for(int j=0;j<(int)V.size();++j)
{
int t=V[V.size()-1-j];
if(get(f[u]|f[t])<=c)
{
f[u]|=f[t];
ans.push_back(u);
ans.push_back(t);
}
}
V.push_back(u);
if(get(f[u])<c) return vector<int>(1,-1);
}
return ans;
}
};

  

2、在$x$ 轴上有$n$个点A,$x$轴上方有$n$个点B,A集合中的每个点在B集合中的每个点找到一个匹配点,B集合中每个点只能与A中的一个点匹配,使得$n$条线段任意两条线段不相交。问有多少种方法。

思路:将B集合按照$y$坐标排序。A集合按照$x$排序。每次枚举A中的一个点与B中最高的点连线,这样分成两段,继续进行这样的匹配。

#include <iostream>
#include <map>
#include <string>
#include <stdio.h>
#include <vector>
#include <set>
#include <algorithm>
#include <string.h>
#include <fstream>
#include <sstream>
using namespace std; const int N=555;
const int mod=1000000007; vector<int> D,X,Y;
int n; map<vector<int>,int> mp[55][55]; int dfs(int L,int R,vector<int> S)
{ if(S.size()<=1) return 1;
if(mp[L][R].count(S)) return mp[L][R][S]; long long ans=0;
for(int i=L;i<=R;++i)
{ const int x1=X[S.back()]-D[i];
const int y1=Y[S.back()];
vector<int> ls,rs;
int ok=1;
for(int j=0;j<(int)S.size()-1;++j)
{
const int x0=X[S[j]]-D[i];
const int y0=Y[S[j]];
const int sgn=x0*y1-x1*y0;
if(sgn==0)
{
ok=0;
break;
}
if(sgn<0) ls.push_back(S[j]);
else rs.push_back(S[j]);
}
if(ok&&ls.size()==i-L&&rs.size()==R-i) ans+=1ll*dfs(L,i-1,ls)*dfs(i+1,R,rs)%mod;
}
return mp[L][R][S]=ans%mod;
} class CoastGuard
{
public:
int count(vector <int> d, vector <int> x, vector <int> y)
{
n=(int)d.size();
D=d;
sort(D.begin(),D.end());
vector<pair<int,int>> p;
vector<int> S;
for(int i=0;i<n;++i)
{
p.push_back(make_pair(y[i],x[i]));
S.push_back(i);
}
sort(p.begin(),p.end());
for(int i=0;i<n;++i)
{
Y.push_back(p[i].first);
X.push_back(p[i].second);
}
return dfs(0,n-1,S);
}
};

  

topcoder srm 703 div1 -3的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  4. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  5. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  6. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  7. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  8. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

  9. topcoder srm 575 div1

    problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...

随机推荐

  1. MySQL.Linux.安装

    Linux 7.x.安装 MySQL 环境: linux是安装在虚拟机中的,宿主机是:win10系统.安装MySQL的时候,首先需要网络是通的(宿主机和虚拟机之间通信).相关配置,参见:虚拟机和宿主机 ...

  2. IE8 CSS hack

    IE8正式版出来有一段日子了,但是针对ie8正式版的CSS hack却很少,其实这是值得庆幸的,因为ie8修复了很多IE6和IE7的一些BUG,更加接近W3C标准. 针对IE8正式版的CSS hack ...

  3. WinSock学习笔记

    Socket(套接字)◆先看定义: typedef unsigned int u_int; typedef u_int SOCKET; ◆Socket相当于进行网络通信两端的插座,只要对方的Socke ...

  4. Quick-Cocos2d-x文件结构分析

    在上一章我们讲过了Quick-Cocos2d-x中的环境搭建,这章我们分析下quick中的文件结构吧!打开quick的文件夹,可以看到如下的这些目录和文件: bin:存放各种与引擎相关的脚本 comp ...

  5. 微信小程序制作家庭记账本之一

    制作的第一天,思索着制作手机端APP还是微信小程序,首先是想到制作APP但是各种收费让我不得不换一条路,所以开始制作小程序,下载了微信小程序开发工具,试着学习制作方法,但是似乎没有成效,但我坚信要一步 ...

  6. px-pt-dp-rem像素单位的换算问题

    px-pt-dp-rem像素单位的换算问题 dp 的意思从 MDPI 到 XXXHDPI 每单位物理尺寸的像素数越来越大.也就是说 mdpi 时 1dp = 1pxxxxhdpi 时 1dp = 4p ...

  7. arcgis desktop 地理编码服务发布

    1.创建地址定位器 2.创建复合地址定位器 3.鼠标右键,共享为,地理编码服务.

  8. render函数

    vue2.0之render函数   虽然vue推荐用template来创建你的html,但是在某些时候你也会用到render函数. 虚拟DOM Vue 通过建立一个虚拟 DOM 对真实 DOM 发生的 ...

  9. .net core创建项目(指令方式)

    所谓的指令创建项目,就是不用再已安装的VS2015的环境下或者VS Core下创建,直接通过DOS指令创建也是OK的. 1.找到你所准备保存项目的项目文件夹(你也可以到某个目录用指令创建项目文件夹[  ...

  10. flask框架----flask入门

    一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是 ...