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 ...
随机推荐
- 牛客多校Round 10
咕咕咕.... 去烽火台和兵马俑了
- 用Docker构建Tomcat镜像
构建tomcat镜像 创建工作目录 [root@elk-node2 tomcat]# mkdir tomcat [root@elk-node2 tomcat]# cd tomcat [root@elk ...
- 第二章 设计高质量的React组件
第二章 设计高质量的React组件 高质量React组件的原则和方法: 划分组件边界的原则: React组件的数据种类: React组件的生命周期. 2.1 易于维护组件的设计要素 1.高内聚:指的是 ...
- TFRecordReader "OutOfRangeError (see above for traceback): RandomShuffleQueue '_1_shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 1, current size 0)" 问题原因总结;
1. tf.decode_raw(features['image_raw'],tf.uint8) 解码时,数据类型有没有错?tf.float32 和tf.uint8有没有弄混??? 2. tf.tra ...
- python基础学习 str,list,dict,set,range,enumerate
一.字符串 s = 'python' s1 = 'python' + 'learn' #相加其实就是简单拼接 s2 = 'python' * 5 #相乘其实就是复制自己多少次,再拼接在一起 字符串切片 ...
- RequestMapping_HiddenHttpMethodFilter 过滤器
[REST] 1.REST:即Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以得 ...
- BNUOJ 26224 Covered Walkway
Covered Walkway Time Limit: 10000ms Memory Limit: 131072KB This problem will be judged on HDU. Origi ...
- ssh登录问题
ssh username@ip 密码正确但是登陆ssh时permission denied 1. 启动sshd:/etc/init.d/ssh start 2. 在/etc/ssh/sshd_ ...
- So easy
Problem Description Small W gets two files. There are n integers in each file. Small W wants to know ...
- Nginx 源码
http://blog.sina.com.cn/s/articlelist_1834459124_1_1.html http://tengine.taobao.org/book/ https://gi ...