http://arc075.contest.atcoder.jp/assignments

昨晚做的atcoder,今天写个简单题解。

F题不会做,800point的,就跪了,要等zk大佬来做。zk能做2400的

C题、我看到数据范围就直接100^3的背包,但是如果数据大点还是可以做的,贪心,首先全部值加起来,如果是%10==0的话,就需要去搭错一题,一题最少分的,而且%10 != 0的。

C

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = 1e2 + ;
int dp[maxn * maxn];
void work() {
dp[] = true;
int n;
cin >> n;
for (int i = ; i <= n; ++i) {
int val;
cin >> val;
for (int i = ; i >= val; --i) {
if (dp[i - val]) dp[i] = true;
}
}
int ans = ;
for (int i = ; i >= ; --i) {
if (dp[i]) {
ans = max(ans, i % == ? : i);
}
}
printf("%d\n", ans);
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

D题、推公式二分,

设x[i]表示在h[i]个位置投放的数量,sum表示x[i]的总和,那么sum就是答案,

对于第h[i]个,需要它死亡,条件是,h[i] - (x[i] * A + (sum - x[i]) * B) <= 0

二分答案sum,然后需要判断n个h[i]都要死亡,每个h[i]死亡,需要的x[i]继续二分,判断即可。sum是满足单调的很容易看出来,

x[i]也满足单调因为A > B,可以化简公式看看,复杂度O(n * log * log),注意不要爆LL

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
LL n, a, b;
LL all;
int hi[ + ];
LL isok(int index, LL sum) {
LL be = , en = sum;
while (be <= en) {
LL mid = (be + en) >> ;
if (a * mid + (sum - mid) * b >= hi[index]) en = mid - ;
else be = mid + ;
}
return be;
}
bool check(LL sum) {
LL need = ;
for (int i = ; i <= n; ++i) {
need += isok(i, sum);
if (need > sum) return false;
}
return true;
}
void work() {
cin >> n >> a >> b;
for (int i = ; i <= n; ++i) {
cin >> hi[i];
all += hi[i];
}
if (n == ) {
cout << (hi[] + a - ) / a << endl;
return;
}
LL be = , en = 1e9;
while (be <= en) {
LL mid = (be + en) >> ;
if (check(mid)) en = mid - ;
else be = mid + ;
}
cout << be << endl;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

D

E题、化简公式 + BIT

设sum[i]表示前缀和,区间[L, R]满足条件,等价于sum[R] - sum[L - 1] >= (R- L + 1) * k

等价于sum[R] - R * k >= sum[L -1] - (L - 1) * k

相当于找前面有多少个数字比当前数字小,离散化 + bit即可。

复杂度 nlogn

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = 2e5 + ;
LL sum[maxn];
int c[maxn];
int n, k;
int lowbit(int x) {
return x & (-x);
}
void upDate(int pos, int val) {
while (pos <= n) {
c[pos] += val;
pos += lowbit(pos);
}
}
int ask(int pos) {
int ans = ;
while (pos) {
ans += c[pos];
pos -= lowbit(pos);
}
return ans;
}
LL vc[maxn], lenvc;
void work() {
scanf("%d%d", &n, &k);
for (int i = ; i <= n; ++i) {
int val;
scanf("%d", &val);
sum[i] = sum[i - ] + val;
}
for (int i = ; i <= n; ++i) {
sum[i] -= 1LL * i * k;
vc[++lenvc] = sum[i];
// cout << sum[i] << " ";
}
// cout << endl;
sort(vc + , vc + + lenvc);
LL ans = ;
for (int i = ; i <= n; ++i) {
int pos = lower_bound(vc + , vc + + lenvc, sum[i]) - vc;
if (sum[i] >= ) {
ans++;
}
ans += ask(pos);
upDate(pos, );
}
cout << ans << endl;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

E

AtCoder Regular Contest 075 2017年6月4日 C、D、E题解的更多相关文章

  1. AtCoder Regular Contest 075

    任意门 C - Bugged 题意:类似装箱问题,但是最后体积总和不能为10的倍数. #include<cstdio> #include<cstring> #include&l ...

  2. AtCoder Regular Contest 075 E - Meaningful Mean(树状数组)

    题目大意:求一个数组中,平均值不小于k的连续子序列个数 所有数减去k,算个前缀和出来,就变成二维数点问题了. 没有修改,离线的话就是CZL所说的“NOIP最喜欢的套路”了:倒着加进BIT,以权值为数组 ...

  3. AtCoder Regular Contest 075 D Widespread

    题目传送门 这道题其实二分一下答案就okay了的 不过LL什么的有时候忘了加 被卡了下 #include<cstdio> #include<cstring> #include& ...

  4. AtCoder Regular Contest 075 C D E (暂时)

    C - Bugged 题意 给\(n\)个数,找其中的一个子集,使得其和最大,且不是\(10\)的整数倍. 思路 先对\(n\)个数求和, 如果本身即不被\(10\)整除,则即为答案. 否则,如果本身 ...

  5. 【arc075f】AtCoder Regular Contest 075 F - Mirrored

    题意 给定一个数x,问有多少个正整数y,使得rev(y)-y==x 其中rev(x)表示x按位翻转之后得到的数. x<=1e9 做法 首先通过打表发现,这个答案不会很大. 这就说明解相当地松弛. ...

  6. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  7. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  8. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  9. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

随机推荐

  1. hdu-5813 Elegant Construction(贪心)

    题目链接: Elegant Construction Time Limit: 4000/2000 MS (Java/Others)     Memory Limit: 65536/65536 K (J ...

  2. ACM学习历程——UVA11234 Expressions(栈,队列,树的遍历,后序遍历,bfs)

    Description   Problem E: Expressions2007/2008 ACM International Collegiate Programming Contest Unive ...

  3. NodeJS测试实例

    实例一: 先来个简单的实例,把下面的代码保存为main.js,让自己欣喜下: var http = require("http"); function onRequest(requ ...

  4. 高级Java工程师必备 ----- 深入分析 Java IO (一)BIO

    BIO编程 最原始BIO 网络编程的基本模型是C/S模型,即两个进程间的通信. 服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可 ...

  5. C++多态的实现条件

    #include <iostream> class Person{ public: virtual void say(){ std::cout<<"person&qu ...

  6. Scala学习——操作符(初)

    经常看到却反应不出来的(->) val a = 2 val b = a->4 //表示生成一个tuple println(b._1+" "b._2) //2 4

  7. jmp $

    in intel x86 instruction set, "jmp $" means jump to this instruction location, thus fallin ...

  8. Laravel框架中使用邮件发送功能

    这里是演示的用户注册之后,进行邮件激活的功能. 点击注册之后,系统会自动发送一个份邮件到注册者的邮箱,注册者点击链接激活账号. 先配置laravel中的(.env)文件 MAIL_DRIVER=smt ...

  9. 7.10实习培训日志-markdown Git

    父模块github地址 一. markdown 1. markdown列表 html是一种发布的格式,markdown是一种书写的格式 区块引用 列表 图片 表格 html 标题 记笔记 写博客 2. ...

  10. 删除重复Row记录数据

    使用CTE,ROW_NUMBER,PARTITION BY来处理数据表重复记录. 先准备下面的数据: IF OBJECT_ID('tempdb.dbo.#Part') IS NOT NULL DROP ...