成功拼手速提前过了AC两题,估计因为这个原因排名挺高的,B题晚上做的时候没绕出来,wa4发。。。


1401A - Distance and Axis

如果 \(n\) 小 于 \(k\) ,则必须将\(A\)移至坐标\(k\),并将B的坐标设置为0或k。 因此答案是\(k - n\)。

如果 \(n\)不小于 \(k\),则将B的坐标定义为\(m (m×2≤n)\)。 根据问题中的条件,\((m-0)\)和\((n - m)\)之间的差应等于k。 即\((n-m)-(m-0)\)是k,并且总结公式 \(m =(n-k)/ 2\) 。 因为B的坐标是整数,所以如果n和k的奇偶性相同,则答案为0,否则答案为1(如果将A的坐标增加1,则m变为整数)。

时间复杂度:O(1)

#include<bits/stdc++.h>
#define ms(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 100;
int n, a[maxn], k; void solve() {
cin >> n >> k;
if (n == k)cout << 0 << endl;
else if (n < k)cout << k - n << endl;
else cout << ((n - k) % 2 == 0 ? 0 : 1) << endl;
} int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t; cin >> t;
while (t--)solve();
}

1401B - Ternary Sequence

我们可以找到ci值为3(−2,0,2)的种类。 并且只有当\(a_i\) 为1且\(b_i\)为2时\(c_i\)才为−2,只有当\(a_i\)为2且bi为1时\(c_i\)才为2。否则\(c_i\)为0。所以我们必须使(ai,bi)对(1,2) 尽可能少,并尽可能多地配对(2,1)。 为此,首先我们可以使(1,0)对,(0,2)对和(2,1)对尽可能多。 之后,将剩余值配对不会影响ci的总和。 (它的ai值为1,bi的值为2,尽管总和减少,我们必须将它们配对。)时间复杂度:O(1)

#include<bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t; cin >> t;
while(t--){
int m, sum = 0, x0, x1, x2, y0, y1, y2;
cin >> x0 >> x1 >> x2 >> y0 >> y1 >> y2; m = min(x0, y2);
x0 -= m;
y2 -= m; m = min(x1, y0);
x1 -= m;
y0 -= m; m = min(x2, y1);
x2 -= m;
y1 -= m;
sum += 2 * m; sum -= 2 * min(x1, y2); cout << sum << endl;
}
}

1401C - Mere Array

让我们将a的最小元素定义为m。 我们发现不能被m整除的元素的位置无法更改,因为这些元素没有m作为因子。 但是我们可以通过以下方式任意重新排列可被m整除的元素:∙假设 \(m = a_x\) ,并且有两个元素\(a_y,a_z\) 和\(x,y,z\)都不同。 交换 \((ax,ay),swap(ay,az)和swap(az,ax)\)。 然后只有\(a_y和a_z\)从初始状态交换。 重复此过程。

因此,我们可以按降序重新排列可被m整除的元素。 之后,如果整个数组不降序,则答案为是,否则为否。

时间复杂度:\(O(nlogn)\)

#include<bits/stdc++.h>
#define ms(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 100;
int n, k;
ll a[maxn], b[maxn];
void solve() {
cin >> n;
ll minn = 1 << 30;
bool flag = true;
for (int i = 1; i <= n; ++i)cin >> a[i], minn = min(a[i], minn), b[i] = a[i];
for (int i = 2; i <= n; ++i)if (a[i] < a[i - 1]) { flag = false; break; }
if (flag) {
cout << "YES" << endl;
return;
}
sort(b + 1, b + 1 + n);
flag = true;
for (int i = 1; i <= n; ++i) {
if (a[i] != b[i])
if (gcd(a[i], minn) != minn) {
flag = false;
break;
}
}
if (flag)cout << "YES" << endl;
else cout << "NO" << endl;
} int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t; cin >> t;
while (t--)solve();
}

1401D - Maximum Distributed Tree

让我们将\(w_i\)定义为将第 \(i\)个边缘从树中移除时属于两个分量中的每个分量的顶点数量的乘积,并将\(z_i\)定义为第\(i\)个边缘上的数量。 现在分布指数等于\(∑^{n-1}_{i = 1}(w_i×z_i)\)。 现在有两种情况:

\[A:m≤n−1
\]

在这种情况下,我们必须将\(p_1,p_2,…p_m\)标记为\(m\)个不同的边缘,因为我们必须最小化\(1-s\)的数量。 为了最大化分布指数,我们可以在\(w_i\)较大的边缘标记一个较大的\(p_i\),因为以下条件成立:∙对于四个正整数\(a,b,c,d(a≥b,c≥d),ac + bd ≥ad+ bc 假设 a = b + x,c = d + y(x,y≥0)\)。 然后可以将等式写成:$$(b + x)(d + y)+bd≥(b + x)d + b(d + y)$$

\[bd + by + xd + xy +bd ≥ bd+ xd + bd + by
\]
\[xy≥0
\]

因为x,y≥0,所以证明了这一点。

并将标签1标记为其余边缘。

B:m> n-1在这种情况下,我们不能使n-1个整数中不存在1-s,并且n-1个数字中的一些将是复合的。 为了最大化分布指数,我们可以将\(m-n + 2最大p_i\)的乘积标记到\(w_i\)最大的边缘,并以与情况A相同的方式将剩余pi标记到其余边缘,因为以下条件成立:∙ 对于五个正整数\(a,b,c,d,e(a≥b,d≥e),acd +be≥bcd+ ae\)代入上述方程式中的f = cd,我们发现方程式与之前相同。 因此,我们证明了这一点。

填充边缘后,计算并找到答案。

时间复杂度:\(O(max(n,m)logmax(n,m))\)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct H { int x, y; };
int ii, n;
const int q = 1e9 + 7;
LL p[100005], pv[100005], vi[100005], w[100005];
H e[200040]; int C(H a, H b) { return a.x < b.x; }
int G(LL a, LL b) { return a > b; } LL dfs(int v){
LL d = 1;
vi[v] = 1;
for (int i = pv[v]; i < pv[v + 1]; i++)
if (!vi[e[i].y])
d += dfs(e[i].y);
w[ii] = d * (n - d);
ii++;
return d;
} int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int t;cin >> t;
while(t--){
int k = 0, m;
LL x = 1;
cin >> n;
for (int i = 0; i < n - 1; i++){
cin >> e[i].x >> e[i].y;
e[i + n - 1].x = e[i].y;
e[i + n - 1].y = e[i].x;
} int sz = 2 * n - 2; sort(e, e + sz, C); for (int i = 1; i < sz; i++)
if (e[i].x > e[i - 1].x)
for (int j = e[i - 1].x + 1; j <= e[i].x; j++)
pv[j] = i;
for (int j = e[sz - 1].x + 1; j <= n + 2;)
pv[j] = sz; ii = k = 0;
dfs(1); cin >> m; for (int i = 0; i < m; i++)
cin >> p[i]; sort(p, p + m, G);
sort(w, w + n - 1, G); if (m < n)
for (int i = m; i < n - 1; i++)
p[i] = 1;
else{
int i; for (i = m - 1; i > m - n; k = i, i--)
w[i] = w[i - m + n - 1]; for (; i; i--)
w[i] = w[0];
} int l = max(m, n - 1); int i;
for (i = 0, x = w[0]; i <= k; i++)
x = x * p[i] % q; for (; i < l; i++)
x = (x + w[i] * p[i]) % q; cout << x << endl; for (int i = 1; i <= n;)
vi[i] = 0;
}
}

Codeforces Round #665 (Div. 2) A - D题题解的更多相关文章

  1. Codeforces Round #609 (Div. 2)前五题题解

    Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...

  2. Codeforces Round #599 (Div. 2)的简单题题解

    难题不会啊…… 我感觉写这个的原因就是因为……无聊要给大家翻译题面 A. Maximum Square 简单题意: 有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一 ...

  3. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  4. Codeforces Round #665 (Div. 2)

     Codeforces Round #665 (Div. 2)  A. Distance and Axis 如果\(B\)在\(O\)左边,那么只能是定值\(OA\) 如果\(B\)在\(OA\)中间 ...

  5. Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)

    这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...

  6. BestCoder Round #11 (Div. 2) 前三题题解

    题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...

  7. Codeforces Round #310 (Div. 2)--A(简单题)

    http://codeforces.com/problemset/problem/556/A 题意:给一个01字符串,把所有相邻的0和1去掉,问还剩下几个0和1. 题解:统计所有的0有多少个,1有多少 ...

  8. Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)

    A. Vladik and Courtesy time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...

  9. Codeforces Round #336 (Div. 2)-608A.水题 608B.前缀和

    A题和B题...   A. Saitama Destroys Hotel time limit per test 1 second memory limit per test 256 megabyte ...

  10. Codeforces Round #316 (Div. 2) (ABC题)

    A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...

随机推荐

  1. SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel

    前言:作者查阅了Sentinel官网.51CTO.CSDN.码农家园.博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例,因此整理了本文,主要介绍SpringMvc集成Se ...

  2. ABAP 生产订单长文本增强 <销售计划 、物料独立需求 长文本带入 计划订单-生产订单 >

    计划订单长文本带入生产订单 尝试在生产订单保存后 用 creat_text 函数 去创建长文本,发现前台不显示,查看 文本抬头底表 STXL 发现有值 ,用READ 函数 读取 能读. DATA:td ...

  3. 安卓端出现https请求失败的一次问题排查

    背景 某天早上,正在一个会议时,突然好几个同事被叫出去了:后面才知道,是有业务同事反馈到领导那里,我们app里面某个功能异常. 具体是这样,我们安卓版本的app是禁止截屏的(应该是app里做了拦截), ...

  4. AtCoder_abc327

    T1 ab 循环从s[0] 到s[n-2] 判断有无ab相邻 T2 A^A 两层循环枚举就可以了 由于aa会增长的很快,所以当a=16时aa就已经大于\(10^{18}\)了,一定不会T 就这么点数打 ...

  5. 【I/O设备】显示设备 Display

    显示设备 电信号→视觉信号 属于软复制输出设备:输出内容不能长期保存 显示内容分为:字符.图形.图像 按显示器件分类:CRT.LCD.OLED等 (PD.LED.ELD.ECD.EPID) 按显示原理 ...

  6. xray+bp+echole+rad

    安装证书 burp安装证书 开启burp suite,如下图所示下载证书后输入cacert.der即可 浏览器中上传证书,设置-->隐私和安全-->管理证书,一直下一步. xray安装证书 ...

  7. Python 中如何编写类型提示

    哈喽大家好,我是咸鱼 我们知道 Python 是一门具有动态特性的语言,在编写 Python 代码的时候不需要显式地指定变量的类型 这样做虽然方便,但是降低了代码的可阅读性,在后期 review 代码 ...

  8. 开源.NetCore通用工具库Xmtool使用连载 - 图像处理篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的扩展动态对象,今天我们继续为大家介绍其中的图像处理类库. 在我们的软件系统中,经常需要对图片进行各种各样的处理:例如最常见的头 ...

  9. 华企盾DSC无缝替换亿赛通案例

    第一种方法无缝替换亿赛通案例 1. 把DSCClient.exe和DSCService.exe添加到亿赛通的加密控制策略中,关联类型设置为*.*|,配置为落地自动解密,包括其它程序也配置成落地自动解密 ...

  10. 关于eclipse中找不到recyclerview的问题

    在eclipse中直接引入v7包之后,还是找不到recyclerview的问题,我们可以通过 sdk\extras\android\support\v7\recyclerview\libs这个目录找到 ...