atcoder 076
日本人的比赛
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的更多相关文章
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Regular Contest 076
在湖蓝跟衡水大佬们打的第二场atcoder,不知不觉一星期都过去了. 任意门 C - Reconciled? 题意:n只猫,m只狗排队,猫与猫之间,狗与狗之间是不同的,同种动物不能相邻排,问有多少种方 ...
- AtCoder Regular Contest 076 E - Connected?
题目传送门:https://arc076.contest.atcoder.jp/tasks/arc076_c 题目大意: 给定一个\(R×C\)的矩阵,然后给定\(N\)对点,每对点坐标为\((X_{ ...
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- AtCoder Regular Contest 076 F - Exhausted?
题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...
- 【AtCoder Regular Contest 076 F】Exhausted (贪心)
Description 机房里有M台电脑排成一排,第i台电脑的坐标是正整数i. 现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Grand Contest 001 C Shorten Diameter 树的直径知识
链接:http://agc001.contest.atcoder.jp/tasks/agc001_c 题解(官方): We use the following well-known fact abou ...
- AtCoder Regular Contest 082
我都出了F了……结果并没有出E……atcoder让我差4分上橙是啥意思啊…… C - Together 题意:把每个数加1或减1或不变求最大众数. #include<cstdio> #in ...
随机推荐
- The following packages have unmet dependencies:
root@ubuntu:~# apt-get install open-iscsiReading package lists... DoneBuilding dependency treeReadin ...
- python多进程和多线程编程
17 多线程和多进程并发 The modules described in this chapter provide support for concurrent execution of code. ...
- [gulp]Cannot find module 'orchestrator'
从github 将项目 clone到本地后,运行gulp 启动项目时,出现这个问题的原因是: 1.clone 项目连同 nodemodules目录也一起下载到本地. 解决方式: 1.从本地删除node ...
- Oracle 密码文件
一.密码文件 作用:主要进行DBA权限的身份认证 DBA用户:具有sysdba,sysoper权限的用户被称为dba用户.默认情况下sysdba角色中存在sys用户,sysoper角色中存在syste ...
- redis+php+mysql处理高并发实例
一.实验环境ubuntu.php.apache或nginx.mysql二.利用Redis锁解决高并发问题,需求现在有一个接口可能会出现并发量比较大的情况,这个接口使用php写的,做的功能是接收 用户的 ...
- python爬虫22 | 以后我再讲python「模拟登录」我就是狗
接下来就是 学习python的正确姿势 做爬虫 绕不开模拟登录 为此小帅b给大家支了几招 python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定! 有些网站的登录很弱鸡 传个用户名和密 ...
- python基础面试题30问(附带答案)
1. 闭包 定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个参数a, 内层函数依旧传入一个参数b, 内层函数使用a和b, 最后 ...
- Thunderbird and Gmail
https://support.mozilla.org/en-US/kb/thunderbird-and-gmail
- c# 缓存!
做项目的时候获取所有城市的时候,发现每次去获取都花费了很多时间,所以用缓存方法让效率更高! 这是我做的例子,如下: public class CacheGetCity { /// <summar ...
- Minimum Sum LCM(uva 10791)
题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1 ...