日本人的比赛

C:如果两个数差了大于1无解,否则分类讨论

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = , mod = ;
int n, m;
ll a[N];
ll power(ll x, ll t)
{
ll ret = ;
for(; t; t >>= , x = x * x % mod)
if(t & )
ret = ret * x % mod;
return ret;
}
int main()
{
scanf("%d%d", &n, &m);
if(n < m) swap(n, m);
if(n - m != && n - m != )
{
puts("");
return ;
}
a[] = ;
for(int i = ; i <= n + ; ++i)
a[i] = a[i - ] * (ll)i % mod;
if(n == m)
printf("%lld\n", 2ll * a[n] % mod * a[m] % mod);
else
printf("%lld\n", a[n] % mod * a[m] % mod);
return ;
}

D:分别按xy排序,然后分别把相邻的差放进去做最小生成树。因为如果三个点xaxbxc,xa<xb<xc,那么连xa->xb->xc肯定比xa->xc优,也就是说连相邻的肯定最优。因为这n-1条边能构成最小生成树,而且是自己维度最优的,所以只要和最小的y比较就行了,肯定会有解,而且是最优的,因为我们不可能会去用其他的边。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
struct edge {
int u, v;
ll w;
edge(int u, int v, ll w) : u (u), v (v), w (w) {}
};
struct data {
ll x, y;
int id;
} a[N];
int n;
int fa[N];
ll ans;
vector<edge> e;
bool cp(edge x, edge y)
{
return x.w < y.w;
}
bool cp1(data x, data y)
{
return x.x < y.x;
}
bool cp2(data x, data y)
{
return x.y < y.y;
}
int find(int x)
{
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; ++i) fa[i] = i;
for(int i = ; i <= n; ++i)
{
scanf("%lld%lld", &a[i].x, &a[i].y);
a[i].id = i;
}
sort(a + , a + n + , cp1);
for(int i = ; i <= n; ++i)
e.push_back(edge(a[i].id, a[i - ].id, a[i].x - a[i - ].x));
sort(a + , a + n + , cp2);
for(int i = ; i <= n; ++i)
e.push_back(edge(a[i].id, a[i - ].id, a[i].y - a[i - ].y));
sort(e.begin(), e.end(), cp);
for(int i = ; i < e.size(); ++i)
{
if(find(e[i].u) == find(e[i].v))
continue;
ans += e[i].w;
fa[find(e[i].u)] = find(e[i].v);
}
printf("%lld\n", ans);
return ;
}

E:并没有AC,不知道哪里错了。

结论:不全在边框上的整数互相之间肯定能连起来。

只要考虑的是在边框上的点,防止出现ijij的情况,于是用一个栈从顺时针加入,如果加入的点和栈顶是同一种数字,那么弹出,否则加入,最后看栈是否为空。

wa

#include<bits/stdc++.h>
using namespace std;
const int N = ;
struct data {
int x, y, id;
};
int n, r, c, top;
vector<data> v[];
data st[N];
bool cp1(data x, data y)
{
return x.x < y.x;
}
bool cp2(data x, data y)
{
return x.x > y.x;
}
bool cp3(data x, data y)
{
return x.y < y.y;
}
bool cp4(data x, data y)
{
return x.y > y.y;
}
int main()
{
scanf("%d%d%d", &r, &c, &n);
for(int i = ; i <= n; ++i)
{
data a, b; scanf("%d%d%d%d", &a.x, &a.y, &b.x, &b.y);
a.id = b.id = i;
if((a.x == || a.x == c || a.y == || a.y == r) && (b.x == || b.x == c || b.y == || b.y == r))
{
if(a.x == )
v[].push_back(a);
else if(a.y == r)
v[].push_back(a);
else if(a.x == c)
v[].push_back(a);
else if(a.y == )
v[].push_back(a);
if(b.x == )
v[].push_back(b);
else if(b.y == r)
v[].push_back(b);
else if(b.x == c)
v[].push_back(b);
else if(b.y == )
v[].push_back(b);
}
}
sort(v[].begin(), v[].end(), cp3);
sort(v[].begin(), v[].end(), cp1);
sort(v[].begin(), v[].end(), cp4);
sort(v[].begin(), v[].end(), cp2);
st[].id = ;
for(int i = ; i < ; ++i)
for(int j = ; j < v[i].size(); ++j)
{
data x = v[i][j];
// printf("x.id=%d x.x=%d x.y=%d\n", x.id, x.x, x.y);
if(x.id == st[top].id)
--top;
else
st[++top] = x;
}
puts(top == ? "YES" : "NO");
return ;
}

atcoder 076的更多相关文章

  1. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  2. AtCoder Regular Contest 076

    在湖蓝跟衡水大佬们打的第二场atcoder,不知不觉一星期都过去了. 任意门 C - Reconciled? 题意:n只猫,m只狗排队,猫与猫之间,狗与狗之间是不同的,同种动物不能相邻排,问有多少种方 ...

  3. AtCoder Regular Contest 076 E - Connected?

    题目传送门:https://arc076.contest.atcoder.jp/tasks/arc076_c 题目大意: 给定一个\(R×C\)的矩阵,然后给定\(N\)对点,每对点坐标为\((X_{ ...

  4. 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)

    题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...

  5. AtCoder Regular Contest 076 F - Exhausted?

    题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...

  6. 【AtCoder Regular Contest 076 F】Exhausted (贪心)

    Description 机房里有M台电脑排成一排,第i台电脑的坐标是正整数i. 现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要 ...

  7. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  8. AtCoder Grand Contest 001 C Shorten Diameter 树的直径知识

    链接:http://agc001.contest.atcoder.jp/tasks/agc001_c 题解(官方): We use the following well-known fact abou ...

  9. AtCoder Regular Contest 082

    我都出了F了……结果并没有出E……atcoder让我差4分上橙是啥意思啊…… C - Together 题意:把每个数加1或减1或不变求最大众数. #include<cstdio> #in ...

随机推荐

  1. A1. JVM 内存区域

    [概述] 在这篇笔记中,需要描述虚拟机中的内存是如何划分的,哪部分区域.什么样的代码和操作可能导致内存溢出异常.虽然 Java 有垃圾处理机制,但是如果生产环境在出现内存溢出异常时,由于开发人员不熟悉 ...

  2. 数据类型对应字节数(32位,64位 int 占字节数)

    数据类型对应字节数(32位,64位 int 占字节数) 可用如sizeof(char),sizeof(char*)等得出 32位编译器: char :1个字节 char*(即指针变量): 4个字节(3 ...

  3. C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size

    #include <stdio.h> #include <string.h> int main() { char a[10] = "\0"; char *p ...

  4. Spring学习开发之路——使用JavaBean代替EJB

    Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发.从简单性.可测试性和松耦 ...

  5. 安装ubuntu系统空间分配问题

    以下是我安装linux系统(ubuntu)时的系统空间配置,以50G为例: 挂载点 大小 格式 分区类型 / 15G Ext4 主分区 /home 30G Ext4 逻辑分区 /boot 1G Ext ...

  6. 集合类(Collection和Map接口)简介

    集合分为Collection和Map,详细分类如下图所示: 以下是测试验证代码: //HashSet,无序(存取不一致).去重 Set set_H = new HashSet(); set_H.add ...

  7. DTD 文件的引入

    MyBatis 有两种配置文件:核心配置文件(mybatis- config.xml)和 SQL 映射文件(mapper.xml).这两种配置文件都需要手动引入各自的 DTD 文件(mybatis-3 ...

  8. Python反射、异常处理

    反射 :字符串到对象属性的映射 hasattr(obj,string), 判断对象obj里面是否有叫string的字段或方法 getattr(obj,string) 获取obj对象里名叫string的 ...

  9. eclipse c/c++配置

    先下载jdk,如果jdk装的是32位,eclipse也要下载32位的,64位也是一样.我用的是jdk7 64位. 下载eclipse,去官网上下载最新的http://www.eclipse.org/d ...

  10. 【Codeforces 1037D】Valid BFS?

    [链接] 我是链接,点我呀:) [题意] 让你判断一个序列是否可能为一个bfs的序列 [题解] 先dfs出来每一层有多少个点,以及每个点是属于哪一层的. 每一层的bfs如果有先后顺序的话,下一层的节点 ...