一、拓扑(top)
【 题目描述】:
给你一个有向二分图,求他的拓扑序列的个数。
【 输入】:
第一行两个数 N,M,表示点数和边数。
接下来 M 行每行两个数 a,b,表示 a 向 b 有一条有向边。
【 输出】:
仅一行,为拓扑序列个数 mod 10007。
【 样例输入】:
8 10
1 5
1 6
2 6
2 7
3 5
3 8
3 7
4 5
4 7
4 6
【 样例输出】:
972
【 说明】:
10%的数据:N≤10;
30%的数据:N≤20;
60%的数据:N≤30;
100%的数据:N≤40;

 
状压DP
。。。算了
 
二、 矩阵 K 小数(mat)
【 题目描述】
给你一个 N*N 的矩阵,每次询问一个子矩形的第 K 小数。
【 输入】
第一行两个数 N,Q,表示矩阵大小和询问组数;
接下来 N 行 N 列一共 N*N 个数,表示这个矩阵;
再接下来 Q 行每行 5 个数描述一个询问:x1,y1,x2,y2,k 表示找到以(x1,y1)为左上角、
以(x2,y2)为右下角的子矩形中的第 K 小数。
【 输出】
对于每组询问输出第 K 小的数。
【 样例输入】
2 2
2 1
3 4
1 2 1 2 1
1 1 2 2 3
【 样例输出】:
1 3
【 说明】:
矩阵中数字是 109 以内的非负整数;
20%的数据:N<=100,Q<=1000;
40%的数据:N<=300,Q<=10000;
60%的数据:N<=400,Q<=30000;
100%的数据:N<=500,Q<=60000。
 
二维树状数组+整体二分
一开始写来写去,发现莫名其妙WA了,然后学hzwer的,结果发现变得和他一模一样。在神犇XYK帮助下,原来L,R打萎了。。
改了之后就一直TLE。。
60,75,80,95
然后inline,读入优化,剪枝,终于100.。。。太艰辛了
 
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
 
#define M 60010
#define N 510
 
#define lowbit(x) (x & -(x))
 
struct Node
{
int x,y,v;
}a[N*N];
int cnt;
 
bool operator<(Node a,Node b)
{
return a.v<b.v;
}
 
struct Data
{
int x1,y1,x2,y2,k;
}e[M];
 
int id[M],f[M],ans[M],tmp[M];
int g[N][N];
 
int n,m;
 
int T;
 
inline int read()
{
int res=0,fh=1;char ch=getchar();
while((ch>'9'||ch<'0')&&ch!='-')ch=getchar();
if(ch=='-')fh=-1,ch=getchar();
while(ch>='0'&&ch<='9')res=res*10+ch-'0',ch=getchar();
return fh*res;
}
 
inline void add(int x,int y,int d)
{
for (int i=x;i<=n;i+=lowbit(i))
for (int j=y;j<=n;j+=lowbit(j))
g[i][j]+=d;
}
 
inline int query(int x,int y)
{
int zzd(0);
for (int i=x;i;i-=lowbit(i))
for (int j=y;j;j-=lowbit(j))
zzd+=g[i][j];
return zzd;
}
 
inline int query(int k)
{
int x1=e[k].x1,y1=e[k].y1,x2=e[k].x2,y2=e[k].y2;
return query(x2,y2)+query(x1-1,y1-1)-query(x1-1,y2)-query(x2,y1-1);
}
 
inline void work(int l,int r,int L,int R)
{
if (l>r || L==R)
return ;
int mid=(L+R)>>1;
while (a[T+1].v<=mid && T<cnt)
add(a[T+1].x,a[T+1].y,1),T++;
while (a[T].v>mid)
add(a[T].x,a[T].y,-1),T--;
int res(0);
for (int i=l;i<=r;i++)
{
if (query(id[i])>e[id[i]].k-1)
f[i]=1,ans[id[i]]=mid,res++;
else
f[i]=0;
}
int nowl=l,nowr=l+res;
for (int i=l;i<=r;i++)
if (f[i])
tmp[nowl++]=id[i];
else
tmp[nowr++]=id[i];
for (int i=l;i<=r;i++)
id[i]=tmp[i];
if (nowl-l)
work(l,nowl-1,L,mid);
if (nowr-l-res)
work(nowl,nowr-1,mid+1,R);
}
 
int main()
{
freopen("mat.in","r",stdin);freopen("mat.out","w",stdout);
n=read(),m=read();
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
{
cnt++;
a[cnt].x=i;
a[cnt].y=j;
a[cnt].v=read();
}
sort(a+1,a+cnt+1);
for (int i=1;i<=m;i++)
 e[i].x1=read(),e[i].y1=read(),e[i].x2=read(),e[i].y2=read(),e[i].k=read(),id[i]=i;
work(1,m,0,a[cnt].v+1);
for (int i=1;i<=m;i++)
printf("%d\n",ans[i]);
return 0;
}
 
三、 最远点(dis)
【 题目描述】:
给你一个 N 个点的凸多边形,求离每一个点最远的点。
【 输入】:
本题有多组数据,第一行一个数 T,表示数据组数。
每组数据第一行一个数 N,表示凸多边形点的个数,接下来 N 对数,依次表示 1~N 这
N 个点的坐标,按照逆时针给出。
【 输出】:
对于每组数据输出 N 个数,第 i 个数表示离第 i 个点最远的点的编号,如果有多个最远
点,输出编号最小的。
【 样例输入】:
1 4
0 0
1 0
1 1
0 1
【样例输出】:
3 4 1 2
【说明】:
坐标的绝对值在 1e9 以内;
任意点对距离数值的平方不会超过 long long;
令 S 为每组数据凸多边形点数之和;
对于 20%的数据,S<=2000;
对于 50%的数据,S<=50000;
对于 100%的数据,S<=500000;
数据有梯度。
 
鬼畜分治,考试根本想不到。。
 
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
 
typedef long long LL;
 
#define N 500010
 
struct Node
{
int x,y,k;
}a[N<<1];
 
int T,n;
 
int g[N];
 
LL work(int i, int j)
{
    return (LL)(a[i].x-a[j].x)*(a[i].x-a[j].x)+(LL)(a[i].y-a[j].y)*(a[i].y-a[j].y);
}
 
void work(int l,int r,int L,int R)
{
if (l>r)
return ;
int m=(l+r)>>1,j;
LL ans=0;//,nowl=max(m+1,L),nowr=min(m+n,R);
for (int i=max(m+1,L);i<=min(m+n,R);i++)
{
LL tmp=(LL)work(m,i);
if (tmp>ans)
ans=tmp,j=i;
}
g[m]=a[j].k;
work(l,m-1,L,j);
work(m+1,r,j,R);
}
 
int main()
{
freopen("dis.in","r",stdin);freopen("dis.out","w",stdout);
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y),a[i].k=i;
for (int i=1;i<=n;i++)
a[i+n]=a[i];
work(1,n,1,n<<1);
for (int i=1;i<=n;i++)
printf("%d\n",g[i]);
}
return 0;
}

HNOI模拟 Day3.23的更多相关文章

  1. HNOI模拟 Day3.25 By Yqc

    怕老婆 [问题描述] 有一天hzy9819,来到了一座大城市拥有了属于他自己的一双滑板鞋.但是他还是不满足想要拥有属于自己的一栋楼,他来到了一条宽敞的大道上,一个一个记录着这些楼的层数以方便自己选择. ...

  2. HNOI模拟 Day3.22

    第一题: 盾盾的打字机 (drdrd) [题目描述] 盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章. 由于有了上次的经验,盾盾预先准备好了一段模板 A 存在了内存中,并以此为基础 ...

  3. JZOJ 4732. 【NOIP2016提高A组模拟8.23】函数

    4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms  Memory Limits: 262144 KB  Detailed ...

  4. 「模拟8.23」阴阳 DP

    对于此题的性质我们考虑DP 分四种情况 黑色块在右侧单调降,单调升 还有在左侧 另外我们这样可能会记重,所以还要将重复记过的也就是边界线是横的和竖的 然后还要将全白全黑加上 1 #include< ...

  5. 「模拟8.23」one递推,约瑟夫

    前置芝士约瑟夫问题 这样大概就是板子问题了 考场的树状数组+二分的60分暴力??? 1 #include<bits/stdc++.h> 2 #define int long long 3 ...

  6. 3194. 【HNOI模拟题】化学(无标号无根树计数)

    Problem 求\(n\)个点的每个点度数不超过\(4\)的无标号无根树个数. Data constraint \(1\le n\le 500\) Solution 尝试着把问题一般化.我们来考虑一 ...

  7. JZOJ.5331【NOIP2017模拟8.23】壕游戏

    Description

  8. noip模拟赛#23

    T1:n个元素的集合.要求取出k个子集,使得k个子集交集为空集.问有多少中取法. =>推了很久...想的是从k等于2的情况推到k等于3的情况....然后k=2推出来了k=3也推出来了...推了挺 ...

  9. [第一波模拟\day3\T3]{益智游戏}(game.cpp)

    [问题描述] 小P和小R在玩一款益智游戏.游戏在一个正权有向图上进行. 小P控制的角色要从A点走最短路到B点,小R控制的角色要从C点走最短路到D点. 一个玩家每回合可以有两种选择,移动到一个相邻节点或 ...

随机推荐

  1. 德尔福 XE5 安卓调试

    https://stackoverflow.com/questions/2604727/how-can-i-connect-to-android-with-adb-over-tcp?page=2&am ...

  2. Java中this、static关键字的内存图解

    Java中的关键字有很多,abstract  default  goto*  null  switch  boolean  do  if  package  nchronzed  break  dou ...

  3. SpringAOP的简单实现

    AOP,即面向切面编程,springAOP采用的是动态代理的技术 其主要作用可以做一些与业务逻辑无关,但却必须的操作,例如日志记录,权限管理,检查数据,等等.首先,来做一个小实现来方便理解 首先,建立 ...

  4. centOS7+mariadb+Nginx+PHP7.0 安装

    1.前期准备工作 更新 yum 源,自带的源没有 PHP5.6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7 ...

  5. ResNet实战

    目录 Res Block ResNet18 Out of memory # Resnet.py #!/usr/bin/env python # -*- coding:utf-8 -*- import ...

  6. day21 05 员工信息表

    day21 05 员工信息表 假设有一个员工信息表,里面有每个员工的名字,id,年龄,电话,还有他们所作的工作,而有时候我们并不需要所有的信息,而想根据某些条件,寻找符合条件即可,即筛选, 比如想要筛 ...

  7. Maximun product

    Given a sequence of integers S = {S1, S2, ..., Sn}, you shoulddetermine what is the value of the max ...

  8. 关于必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用异常问题

    问题描述: 下午调试代码的时候突然发现页面突然异常了,原本以为是代码哪里写错了,后来通过定位发现MVC,UI界面的Linq异常,即关于必须添加对程序集“System.Runtime, Version= ...

  9. ASP.NET获取客户端IP及MAC地址

    朋友最近问如何获取客户端IP及MAC地址,一直想把这段给整理一下,契机来了:下边分为了C#后台获取的方法和前台Javascript(调用ActiveX)获取的方法,大家如果有好的方法一起讨论撒O(∩_ ...

  10. 【05】emmet系列之各种缩写

    [01]emmet系列之基础介绍 [02]emmet系列之HTML语法 [03]emmet系列之CSS语法 [04]emmet系列之编辑器 [05]emmet系列之各种缩写 各种缩写   缩写:! & ...