Contest

A. ssoj2964 交错的士兵

\(n\) 个数的排列,从左到右依次为 1, 2, …, \(n\)。\(n\) 次操作,对于第 \(i\) 次操作,从左到右分成很多段,每段 \(i\) 个,若末尾有剩余,剩余部分自成一段;然后对于每一段,段中第一个数移动到该段末尾,其余数向左移动对齐。输出经过 \(n\) 次操作后的排列。\(1\le n\le 10^6\)。

[input]  4
[output] 4 2 3 1

显然 \(n^2\) 模拟会超时。考虑 \(O(n\log n)\) 做法:观察到每次操作仅每段第一个数有较大位移,其余数仅仅向左移动一位。所以如果不移动其余数,仅移动数列头、尾指针和每段第一个数。

代码实现坑点很多。

#include <cstdio>
#include <algorithm>
using namespace std; int n, d[2000006]; int main() {
scanf("%d", &n);
for (int i=1; i<=n; ++i) d[i]=i;
for (int i=2; i<=n; ++i) {
for (int j=n/i*i-(n%i==0?i:0)+i-1; j>=i-1; j-=i)
d[min(n+i-1,j+i)]=d[j];
}
for (int i=n; i<n+n; ++i) printf("%d ", d[i]);
return 0;
}

B. ssoj2965 乙女文楽

\(n\) 个数的数列。不多于 \(k\) 次修改机会,每次修改将删去所有值为 \(x\) 的数。最大化连续等值区间长度。\(1\le n\le 10^5,0\le k\le n-1, 1\le a_i\le n\)。

尺取法。维护区间头尾指针,保证区间中不多于 \(k+1\) 种数值。随时更新答案。

#include <cstdio>
#include <algorithm>
using namespace std; int n, k, a[100005], ans, cnt, col[100005]; int main() {
scanf("%d%d", &n, &k);
for (int i=1; i<=n; ++i) scanf("%d", &a[i]);
for (int i=1, j=1; i<=n; ++i) {
if (++col[a[i]]==1) ++cnt;
while (cnt>k+1) if (--col[a[j++]]==0) --cnt;
ans=max(ans, col[a[i]]);
}
printf("%d\n", ans);
return 0;
}

C. ssoj2674 Delicious Apples

一个环长度为 \(L\), 上面有 \(n\) 棵树,篮子一次可装 \(k\) 个苹果;给出每棵树的位置和树上的苹果数,求将所有苹果运回原点的最少的总距离。\(1\le n,k\le 10^5,\sum a_i\le 10^5,1\le L\le 10^9\)。

贪心。根据题目意思,有 “原路返回” 和 “走一圈” 两种走法。显然,当只有不多于 \(k\) 个苹果且位于环下部时,走一整圈更优;对于其他情况,显然原路返回更优。实际上,可以证明最优解中只有不多于一次 “走一圈”。

对苹果树离散,分为左右半边,分别贪心。枚举 “走一圈” 包含的苹果数量。

#include <cstring>
#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std; int T, n, L, k;
ll sl[100005], sr[100005], l[100005], r[100005], lt, rt, ans; inline int read() {
char c; while (!isdigit(c=getchar()));
int v=c-48; while (isdigit(c=getchar())) v=v*10+c-48;
return v;
} int main() {
T=read();
while (T--) {
memset(sl, 0, sizeof(sl)), memset(sr, 0, sizeof(sr)),
memset(l, 0, sizeof(l)), memset(r, 0, sizeof(r));
L=read(), n=read(), k=read();
lt=0, rt=0;
for (int i=1, pos, num; i<=n; ++i) {
pos=read(), num=read();
if ((pos << 1)<=L) while (num--) l[++lt]=pos;
else while (num--) r[++rt]=L-pos;
}
sort(l+1, l+1+lt), sort(r+1, r+1+rt);
for (int i=1; i<=lt; ++i) {
if (i<=k) sl[i]=l[i]; else sl[i]=sl[i-k]+l[i];
}
for (int i=1; i<=rt; ++i) {
if (i<=k) sr[i]=r[i]; else sr[i]=sr[i-k]+r[i];
}
ans=(sl[lt]+sr[rt])<<1;
for (int i=1; i<=lt && i<=k; ++i) {
ll Le=lt-i, Ri=rt-k+i;
ans=min(ans, ((sl[Le]+sr[Ri])<<1)+L);
}
printf("%lld\n", ans);
}
return 0;
}

本题代码调试过程中出现玄学错误。太痛苦了……

D. 三角形牧场 (pasture)

和所有人一样,奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师 Hei 想建造围有漂亮白色栅栏的三角形牧场。 她拥有 \(N\) (\(3≤N≤40\)) 块木板,每块的长度 \(L_i\) (\(1≤L_i≤40\)) 都是整数,她想用所有的木板围成一个三角形使得牧场面积最大。 请帮助 Hei 小姐构造这样的牧场,并计算出这个最大牧场的面积。

暴力枚举三角形两边长度(第三边可以推算出来,即与总长相减),对于所有可能的三角形,Heron 公式更新答案。易证三角形任意一边长度不超过总长的一半。Heron 公式:\(S=\sqrt{p(p-a)(p-b)(p-c)}\), 其中 \(\displaystyle p=\frac{a+b+c}{2}\).

预处理三角形可能的两边,复杂度 $O(np^2)\approx O(n^5) $。

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const double eps=1e-5; int n, x[43], L, p;
int f[803][803];
double ans; int main() {
scanf("%d", &n);
for (int i=1; i<=n; ++i) scanf("%d", &x[i]), L+=x[i];
double p=L/2.0;
f[0][0]=1;
for (int i=1; i<=n; ++i)
for (int a=p; a>=0; --a) for (int b=p; b>=0; --b)
if (a>=x[i] && f[a-x[i]][b] || b>=x[i] && f[a][b-x[i]])
f[a][b]=1;
for (int a=p; a; --a) for (int b=p; b; --b) if (f[a][b]) {
int c=L-a-b;
if (a<p && b<p && c<p)
ans=max(ans, (p-a)*(p-b)*(p-c));
}
if (ans<eps) printf("-1\n");
else printf("%d\n", (int)(sqrt(p*ans)*100));
return 0;
}

在逻辑运算当中,||&&短路符号|& 不是。而运算符优先级 |& 要比 ||&& 高,其中 ||&& 高。利用以上几点即可继续缩短代码。

5 November in 614的更多相关文章

  1. 8 November in 614

    我开始看心灵鸡汤了-- 每当在书中读及那些卑微的努力,都觉得感动且受震撼.也许每个人在发出属于自己的光芒之前,都经历了无数的煎熬,漫长的黑夜,无尽的孤独,甚至不断的嘲讽和否定,但好在那些踮脚的少年,最 ...

  2. 7 November in 614

    每日总结不能少!让自己的头脑好好清醒清醒,才不会犯那些所谓的低级错误! Contest A. ssoj3045 A 先生砍香蕉树 根据数据范围 \(m\le 1000,b\le 10000\),显然本 ...

  3. 6 November in 614

    Contest A. greet map,完了. B. gift map,完了. C. [Usaco2008 Nov Gold] 安慰奶牛 最小生成树.新边权设为原边权的两倍,再加上两端点的点权.完了 ...

  4. [POJ1765]November Rain

    [POJ1765]November Rain 试题描述 Contemporary buildings can have very complicated roofs. If we take a ver ...

  5. We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.

    我表示我很难过 Nitrous We will be discontinuing the Nitrous Development Platform and Cloud IDE on November ...

  6. TIOBE Index for November 2015(转载)

    原文地址:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html November Headline: Java once a ...

  7. 日常英语---七、[Updated November 14 at 4:10 PM PST] Scheduled Game Update - November 14, 2018(n.标准)

    日常英语---七.[Updated November 14 at 4:10 PM PST] Scheduled Game Update - November 14, 2018(n.标准) 一.总结 一 ...

  8. Multi-Cloud & Kubernetes: Cloud Academy November 2018 Data Report

    https://cloudacademy.com/research/multi-cloud-kubernetes-devops-cloud-academy-data-report-nov-18/ No ...

  9. ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010

    ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...

随机推荐

  1. Nginx 模块 - ngx_http_rewrite_module

    原文地址 ngx_http_rewrite_module 模块用于通过 PCRE 正则表达式改变请求 URI,返回重定向并可以有条件地选择配置. break.if.return.rewrite 以及 ...

  2. oracle三大范式

    范式: 设计数据库定义的一个规则, 三大范式, 灵活运用, 人的思想是活的 一范式 1, 不存在冗余数据 同一个表中的记录不能有重复----所以主键(必须有) 2, 每个字段必须是不可再分的信息(列不 ...

  3. oracle用户权限管理

    oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权 1.查看当前数据库所有用户: select * from all_users; 2.查看表所支持的权限: select ...

  4. 最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解

    最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边 ...

  5. 获取Linux内核未导出符号的几种方式

    从Linux内核的2.6某个版本开始,内核引入了导出符号的机制.只有在内核中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL导出的符号才能在内核模块中直接使用.然而,内核并没有导出所 ...

  6. How to exploit the x32 recvmmsg() kernel vulnerability CVE 2014-0038

    http://blog.includesecurity.com/2014/03/exploit-CVE-2014-0038-x32-recvmmsg-kernel-vulnerablity.html ...

  7. jar包 war包

    jar包和war包的区别: war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令 ...

  8. python学习第二十五天函数位置参数和关键词参数

    函数位置参数顾名思义就是按位置排序,按位置对应参数,位置一一对应,函数的关键词参数是不按照顺序来的,可以指定的参数传值.但是注意的是,位置参数必须在关键词参数之前. 1,函数位置参数 def good ...

  9. Windows下anaconda安装opencv

    win+R打开cmd界面,输入conda create -n opencv python=3.6,创建名为opencv的虚拟空间,然后一路y,直到安装完成. activate opencv 然后输入  ...

  10. NGUI多行输入框和滚动条结合使用(text list script 和scroll bar script)

    一,我们添加一个label,如下图:将label属性设置 二,给label添加一个box collider.然后在add component 添加test list,如下图: 三,添加一个脚本Test ...