【codeforces】【比赛题解】#872 CF Round #440 (Div.2)
链接。
【A】寻找漂亮数字
题意:
给定了两列非零数字。
我们说一个数是漂亮的,当它的十进制表达中有至少一个数从数列一中取出,至少有一个数从数列二中取出。
最小的漂亮数字是多少?
输入:
第一行两个数\(n,m(1\leq n,m\leq9)\),表示数列一、二的长度。
第二行n个数,表示数列一。
第三行m个数,表示数列二。
题解:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
#define F(i,a,b) for(int i=a;i<=b;++i)
#define dF(i,a,b) for(int i=a;i>=b;--i)
#define F2(i,a,b) for(int i=a;i<b;++i)
inline int Min(int p,int q){return p<q?p:q;}
inline int Max(int p,int q){return p>q?p:q;}
int n,m,a[],b[],A=,B=;
void init(){
int x;
scanf("%d%d",&n,&m);
F(i,,n) scanf("%d",&x), a[x]=, A=Min(A,x);
F(i,,m) scanf("%d",&x), b[x]=, B=Min(B,x);
}
int main(){
init();
F(i,,) if(a[i]&&b[i]) {printf("%d",i); return ;}
if(A>B) printf("%d%d",B,A);
else printf("%d%d",A,B);
return ;
}
【B】最小值的最大值的最大值
题意:
给定了一个数组和一个数k,你要把这个数组分成恰好k份,使得这k份中的每一份的最小值的最大值最大。
求出这个最大值。
输入:
第一行,两个数n,k。
第二行,n个数,表示数组中的元素。
输出:
一个数,表示最大值。
题解:
当k=1时,答案是最小值。当k>=3时,答案是最大值。
当k=2时,枚举分割点。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
#define F(i,a,b) for(int i=a;i<=b;++i)
#define dF(i,a,b) for(int i=a;i>=b;--i)
#define F2(i,a,b) for(int i=a;i<b;++i)
inline int Min(int p,int q){return p<q?p:q;}
inline int Max(int p,int q){return p>q?p:q;}
int n,k,a[],min=,max=-;
int m1[],m2[];
void init(){
scanf("%d%d",&n,&k);
F(i,,n) scanf("%d",a+i), max=Max(max,a[i]), min=Min(min,a[i]);
}
int main(){
init();
if(k>=) printf("%d",max);
else if(k==) printf("%d",min);
else{
m1[]=a[]; F(i,,n) m1[i]=Min(m1[i-],a[i]);
m2[n]=a[n]; dF(i,n-,) m2[i]=Min(m2[i+],a[i]);
int Ans=-;
F(i,,n) Ans=Max(Ans,Max(m1[i-],m2[i]));
printf("%d",Ans);
}
return ;
}
【C】最大分割
题意:
给你一个数n,把它分成若干个合数的和,最多能分成多少个合数?有多组数据。
输入:
第一行一个数q(1<=q<=10^5),表示数据组数。
对于每个数据,输入一个数n(1<=n<=10^9)。
输出:
对于每组数据,输出一行一个数表示分割数。如果无法做到,输出-1。
题解:
4是最小的合数,对于n足够大的情况,可以分成若干4和一些较小的合数。
于是对4的余数分类讨论。具体看代码。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
#define F(i,a,b) for(int i=a;i<=b;++i)
#define dF(i,a,b) for(int i=a;i>=b;--i)
#define F2(i,a,b) for(int i=a;i<b;++i)
inline int Min(int p,int q){return p<q?p:q;}
inline int Max(int p,int q){return p>q?p:q;}
int T,n;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
switch(n%){
case : printf("%d\n",n/);break;
case : {n>=?printf("%d\n",(n-)/+):puts("-1");break;}
case : {n>=?printf("%d\n",(n-)/+):puts("-1");break;}
case : {n>=?printf("%d\n",(n-)/+):puts("-1");break;}
}
}
return ;
}
【D】和区间与异或有关的东西
不会。
【E】点、线什么的和现成的标题
题意:
平面直角坐标系中有一些格点,你可以过每个格点画出关于x轴或y轴平行的直线,也可以不画,问有最终多少种不同的画法,重合的直线算作同一条。
输入:
第一行,一个数n(1<=n<=10^5),表示格点的个数。
接下来n行,每行两个数xi, yi,表示第i个点的坐标是(xi,yi)。保证没有重合的点。
输出:
一个数,画法总数对10^9+7取模的结果。
题解:
只有横坐标或纵坐标相同的点才会互相影响,而互相影响的关系是传递的。
我们先把不会互相影响的点分开,最终的答案是每一部分的答案的乘积。
那么现在我们有一堆互相影响的点,如何计算方案数?
参见http://www.cnblogs.com/kkkkahlua/p/7679526.html和http://hzwer.com/2950.html。嘻嘻。
代码也是抄的,嘤嘤嘤。
#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
typedef long long LL;
const LL mod = 1e9+;
struct node {
int x, y;
}a[maxn];
int fa[maxn], sz[maxn], f[maxn], id[maxn], m[maxn];
bool circ[maxn], vis[maxn];
vector<int> v[maxn];
set<int> sx, sy;
bool cmp1(int i, int j) {
return a[i].x < a[j].x || (a[i].x == a[j].x && a[i].y < a[j].y);
}
bool cmp2(int i, int j) {
return a[i].y < a[j].y || (a[i].y == a[j].y && a[i].x < a[j].x);
}
LL poww(LL a, LL b) {
LL ret = ;
while (b) {
if (b & ) (ret *= a) %= mod;
(a *= a) %= mod;
b >>= ;
}
return ret;
}
int find(int x) { return fa[x] == x ? x : fa[x] = find(fa[x]); }
void unionn(int a, int b) {
a = find(a), b = find(b);
if (a == b) { circ[a] = true; return; }
if (sz[a] > sz[b]) swap(a, b);
fa[a] = b; sz[b] += sz[a];
circ[b] |= circ[a];
}
int main() {
int n;
scanf("%d", &n);
for (int i = ; i < n; ++i) {
scanf("%d%d", &a[i].x, &a[i].y);
}
for (int i = ; i < n; ++i) id[i] = i;
for (int i = ; i < n; ++i) fa[i] = i, sz[i] = ; sort(id, id+n, cmp1);
for (int i = ; i < n; ++i) {
if (a[id[i]].x == a[id[i-]].x) unionn(id[i-], id[i]);
}
sort(id, id+n, cmp2);
for (int i = ; i < n; ++i) {
if (a[id[i]].y == a[id[i-]].y) unionn(id[i-], id[i]);
}
for (int i = ; i < n; ++i) fa[i] = find(i); int tot = -;
for (int i = ; i < n; ++i) {
if (!vis[fa[i]]) vis[fa[i]] = true, f[++tot] = fa[i], m[fa[i]] = tot;
v[m[fa[i]]].push_back(i);
}
LL ans = ;
for (int i = ; i <= tot; ++i) {
sx.clear(), sy.clear();
for (auto idx : v[i]) {
sx.insert(a[idx].x), sy.insert(a[idx].y);
}
LL mul = poww(, sx.size()+sy.size());
if (!circ[f[i]]) (mul += mod-) %= mod;
(ans *= mul) %= mod;
}
printf("%I64d\n", ans);
return ;
}
【codeforces】【比赛题解】#872 CF Round #440 (Div.2)的更多相关文章
- 竞赛题解 - CF Round #524 Div.2
CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...
- Codeforces Round #440 (Div. 2)【A、B、C、E】
Codeforces Round #440 (Div. 2) codeforces 870 A. Search for Pretty Integers(水题) 题意:给两个数组,求一个最小的数包含两个 ...
- CF Round #551 (Div. 2) D
CF Round #551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名. 设\(dp_i\ ...
- CF Round #510 (Div. 2)
前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...
- CF Round #600 (Div 2) 解题报告(A~E)
CF Round #600 (Div 2) 解题报告(A~E) A:Single Push 采用差分的思想,让\(b-a=c\),然后观察\(c\)序列是不是一个满足要求的序列 #include< ...
- Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)
A. Search for Pretty Integers 题目链接:http://codeforces.com/contest/872/problem/A 题目意思:题目很简单,找到一个数,组成这个 ...
- Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2) D. Something with XOR Queries
地址:http://codeforces.com/contest/872/problem/D 题目: D. Something with XOR Queries time limit per test ...
- cf Round#273 Div.2
题目链接,点击一下 Round#273 Div.2 ================== problem A Initial Bet ================== 很简单,打了两三场的cf第一 ...
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
终于打了一场CF,不知道为什么我会去打00:05的CF比赛…… 不管怎么样,这次打的很好!拿到了Div. 2选手中的第一名,成功上紫! 以后还要再接再厉! [A]Check the string 题意 ...
随机推荐
- Java机器学习框架deeplearing4j入门教程
1.添加项目maven添加依赖 or 导入jar包 or 使用jvm <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- GIT 旧库迁移到新库
1.在gitlab创建新项目,得到SSH地址2.用gitextent打开旧项目,记得所有分支合并成一个(如果确实无法合并,则需要一个个复位推送)3.复位到需要推送的节点分支4.打开菜单栏的档案库,管理 ...
- HNOI2018毒瘤
题面链接 luogu sol 这篇博是骗访问量的QwQ. 考虑树怎么做,简单容斥.诸如\(f[u][0]=\prod (f[v][0]+f[v][1]),f[u][1]=\prod f[v][0]\) ...
- C++中unique函数
目录 介绍 用法举例 数组 vector 介绍 unique是STL比较实用的一个函数.用于"去除"容器内相邻的重复的元素(只保留一个).这里说的去除并不是真正将容器内的重复元素删 ...
- 2017实习【Java研发】面经
标签: 实习 面经 Java研发 阿里.腾讯.华为 找2017暑假实习,经历过被腾讯拒绝的无奈,也有拿到阿里和华为offer的喜悦,找实习过程也有一段时间了,在此把之前的面试知识点和经历做个小总结,以 ...
- [NOI2012]美食节——费用流(带权二分图匹配)+动态加边
题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...
- 【费用流】【网络流24题】【P4013】 数字梯形问题
Description 给定一个由 \(n\) 行数字组成的数字梯形如下图所示. 梯形的第一行有 \(m\) 个数字.从梯形的顶部的 \(m\) 个数字开始,在每个数字处可以沿左下或右下方向移动,形成 ...
- 团体程序设计天梯赛 L1-049. 天梯赛座位分配(测试数据+不同方法)
Data: /*33 2 1#11 4 7 10 13 16 19 22 25 2831 33 35 37 39 41 43 45 47 4951 53 55 57 59 61 63 65 67 69 ...
- c++操作mysql入门详解
首先,根据你当前的操作系统,还有开发工具,选择相应的mysql版本.本人选择的环境是win10 + vs2013 需要解决三个问题:1.下载安装mysql服务器,并登录mysql测试一下是否安装成功: ...
- 关于RESTful的理解
如何更好的理解RESTful? (转自https://sanwen8.cn/p/54czrEO.html) 在测试开发中,我们经常接触到API,在调用API时候特别是第三方API时候,我们常常陷入以下 ...