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 ...
随机推荐
- 在做导入一个excel文件的时候,数据有空值的时候
StringUtil.isNotEmpty(i.getFname()),用这个方法可以解决 java string 去除前后两端的空格和空字符使用.trim()
- Configure a proxy for your API calls with Angular CLI
Table of contents Local development setup with Angular Issue: Dev server plus backend API Configurin ...
- UVA-1599 Ideal Path(双向BFS)
题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...
- 面试总结——Java高级工程师(二)
一.Java底层基础题 1.SpringMVC的原理以及返回数据如何渲染到jsp/html上? 答:Spring MVC的核心就是 DispatcherServlet , 一个请求经过 Dispatc ...
- JSP页面中的动作标识
JSP页面中的动作标识 制作人:全心全意 包含文件标识<jsp:include> 此标识和include指令类似,用于向当前页面中包含其它的文件,且包含的文件可以是动态文件,也可以是静态文 ...
- BZOJ 1468 Tree 【模板】树上点分治
#include<cstdio> #include<algorithm> #define N 50010 #define M 500010 #define rg registe ...
- [USACO09JAN]全流Total Flow
题目描述 Farmer John always wants his cows to have enough water and thus has made a map of the N (1 < ...
- codevs3410 别墅房间
题目描述 Description 小浣熊松松到他的朋友家别墅去玩,发现他朋友的家非常大,而且布局很奇怪.具体来说,朋友家的别墅可以被看做一个N*M的矩形,有墙壁的地方被标记为’#’,其他地方被标记为’ ...
- Wikioi 3776 生活大爆炸版石头剪子布
题目描述 Description 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8集中出现了一种石头剪刀布的升级版游戏 ...
- jQuery通过event获取点击事件的事件对象
要想搞明白js的事件机制,必须搞清楚几个概念:事件对象,事件源,还有事件流 事件对象: 当事件发生时会产生事件对象,事件对象的作用是用来记录“事件发生是一些相关的信息.注意事件对象只有在事件发生时才会 ...