HDU 4305 Contest 1
感觉是有很多细节要处理的。尤其是求逆元后的运算,应该是存在超范围的情况的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#define MOD 10007
#define N 305
using namespace std; struct point{
int x,y;
}p[N];
int D[N][N],G[N][N],C[N][N];
bool vis[N];
int dist(point a,point b){
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
} void getc(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
C[i][j]=D[i][j]-G[i][j];
}
} bool bfs(int n){
int c=0;
memset(vis,false,sizeof(vis));
queue<int>que;
que.push(1);
vis[1]=true;
while(!que.empty()){
c++;
int tmp=que.front();
que.pop();
for(int i=1;i<=n;i++){
if(G[tmp][i]==1&&!vis[i]){
que.push(i);
vis[i]=true;
}
}
}
if(c==n) return true;
else return false;
} void exgcd (int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1, y = 0;
return ;
}
exgcd (b, a%b, x, y);
int tp = x;
x = y;
y = tp - a/b*y;
} int work(int n){
int x,y;
int sgn=0;
for(int i=1;i<n;i++)
for(int j=1;j<n;j++)
C[i][j]=(C[i][j]%MOD+MOD)%MOD;
for(int i=1;i<n;i++){
if(C[i][i]==0){
int j;
for(j=i+1;j<n;j++)
if(C[j][i]!=0)
break;
if(j>=n) return -1;
for(int k=1;k<n;k++)
swap(C[i][k],C[j][k]);
sgn++;
}
exgcd(C[i][i],MOD,x,y);
x=(x%MOD+MOD)%MOD;
for(int j=i+1;j<n;j++){
for(int k=i+1;k<n;k++){
C[j][k]=((C[j][k]-(((C[i][k]*x)%MOD)*C[j][i])%MOD)%MOD+MOD)%MOD;
}
}
}
int ans=1;
for(int i=1;i<n;i++)
ans=(ans*(C[i][i]))%MOD;
if(sgn&1)return (MOD-ans)%MOD;
return ans;
} int main(){
int T,n,r;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&r);
for(int i=1;i<=n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
memset(D,0,sizeof(D));
memset(G,0,sizeof(G));
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(i!=j){
int tp=dist(p[i],p[j]);
if(tp<=r*r){
bool flag=true;
for(int k=1;k<=n;k++){
if(k!=i&&k!=j&&dist(p[i],p[k])<=dist(p[i],p[j])&&dist(p[j],p[k])<=tp
&&(p[i].y-p[k].y)*(p[k].x-p[j].x)==(p[k].y-p[j].y)*(p[i].x-p[k].x)){
flag=false;
break;
}
}
if(flag){
D[i][i]++;D[j][j]++;
G[i][j]=G[j][i]=1;
}
}
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++)
// cout<<D[i][j]<<' ';
// cout<<endl;
// }
getc(n);
if(!bfs(n)){
printf("-1\n");
}
else{
int ans=work(n);
printf("%d\n",ans);
}
}
return 0;
}
HDU 4305 Contest 1的更多相关文章
- HDU - 4305 - Lightning 生成树计数 + 叉积判断三点共线
HDU - 4305 题意: 比较裸的一道生成树计数问题,构造Krichhoof矩阵,求解行列式即可.但是这道题还有一个限制,就是给定的坐标中,两点连线中不能有其他的点,否则这两点就不能连接.枚举点, ...
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- [ACM] hdu 5045 Contest (减少国家Dp)
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...
- HDU 4305 Lightning(计算几何,判断点在线段上,生成树计数)
Lightning Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 4305 生成树计数问题
Lightning Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU–5988-Coding Contest(最小费用最大流变形)
Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 【HDU 4305】Lightning(生成树计数)
Problem Description There are N robots standing on the ground (Don't know why. Don't know how). Sudd ...
- hdu 5045 Contest(状态压缩DP)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...
随机推荐
- WebApi传参总动员(一)
目前自己的工作和WebApi相关,免不了传入.接收参数.以前的老办法是从请求流中获取json,再反序列化,这中间有2个不能控制的地方,一个是流,一个是反序列化,都需要try,总感觉非常的不爽.因此对W ...
- shell脚本监测文件变化
1. 我使用过的Linux命令之du - 查看文件的磁盘空间占用情况 用途说明 du命令是用来查看磁盘空间占用情况的,在Linux系统维护时常会用到,并且通常与df命令搭配使用.首先使用df看一下各个 ...
- poj1035Spell checker
暴力解决. 先把字典里的每一个单词的长度存起来.在查找的时候.就比較长度,在多一个少一个之间找, #include<stdio.h> #include<string.h> #i ...
- leetcode dfs Palindrome Partitioning
Palindrome Partitioning Total Accepted: 21056 Total Submissions: 81036My Submissions Given a string ...
- Java学习之道:Java 导出EXCEL
1.Apache POI简单介绍 Apache POI是Apache软件基金会的开放源代码函式库.POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开 ...
- Regexp-Utils:身份证号校验
ylbtech-Regexp-Utils:身份证号校验 1.返回顶部 1.方法 var idCardNoUtil = { /*省,直辖市代码表*/ provinceAndCitys: { 11: &q ...
- Redis学习笔记(二) Redis 数据类型
Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...
- 不用copy代码--eclipse使用git提交项目-转
原文地址:http://blog.csdn.net/u014079773/article/details/51595127 准备工作: 目的:eclipse使用git提交本地项目,提交至远程githu ...
- 关于QueryRunner数据查询以及常用方法
QueryRunner数据查询操作调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object.params)R ...
- c# CacheHelper缓存帮助类
一.开篇 主要功能:改善程序性能.服务器的响应速度,尤其是当数据的处理过程变得复杂以及访问量变大时,变得比较明显.有些数据并非时刻在发生变化,如果我们可以将一些变化不频繁的数据的最终计算结果(包括页面 ...