Codeforce Round #424
A 略 B 略
C:
先对Ai数列预处理前缀和 然后把Bi的每个都加一次 最终得到的结果为ans[sum]++; 最后如果有一个ans[sum]>=k即满足所有K个条件就输出(注意!!前缀和要进行unique操作!!!因为可能会有+1 -1 +1这种出现
#include <bits/stdc++.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#define foror(i,a,b) for(i=a;i<b;i++)
#define foror2(i,a,b) for(i=a;i>b;i--)
#define EPS 1.0e-6
#define PI acos(-1.0)
#define INF 3000000000
#define MOD 1000000009
#define mem(a,b) memset((a),b,sizeof(a))
#define TS printf("!!!\n")
#define lson o<<1, l, m
#define rson o<<1|1, m+1, r
//using ll = long long;
//using ull= unsigned long long;
//std::ios::sync_with_stdio(false);
using namespace std;
//priority_queue<int,vector<int>,greater<int>> que;
typedef long long ll;
map<int,int> mp;
stack<int> s;
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int n,k;
int ans;
cin >> n >> k;
int a[n+],b[k+];
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]=a[i-]+a[i];
}
for(int i=;i<=k;i++)
{
scanf("%d",&b[i]);
}
sort(a+,a++n);
int lenth=unique(a+,a++n)-(a+);
for(int i=;i<=k;i++)
{
for(int j=;j<=lenth;j++)
{
s.push(b[i]]+a[j]);
mp[b[i]]+a[j]]++;
}
}
for(int i=;i<s.size();i++)
{
if(mp[s[i]>=k)
{
ans++;
mp[s[i]]=;
}
}
cout<<ans<<endl;
return ;
}
D:
二分或者DP
二分:由于要尽可能使每个人拿到距离自己最近的钥匙,我们先把所有人根据位置排序,把所有钥匙根据位置排序,然后二分答案,判断某一个值是否满足条件,具体判断过程见代码,每次尽量取左边的钥匙。
#include <cstdio>
#include <map>
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int T;scanf("%d",&T);while(T--) typedef long long ll;
const int maxn= ;
const int mod = ;
const int INF = 0x3f3f3f3f;
const double eps = 1e-; int n,k,p;
ll a[maxn];
ll b[maxn];
bool vis[maxn]; bool judge(ll limit)
{
int num=;
mst(vis,);
for(int i=;i<k;i++)
for(int j=;j<n;j++)
{
if(vis[j]) continue;
if(abs(b[i]-a[j])+abs(b[i]-p)<=limit)
{
vis[j]=true;
num++;
break;
}
}
return num==n;
} int main()
{
scanf("%d%d%d",&n,&k,&p);
for(int i=;i<n;i++)
{
scanf("%I64d",&a[i]);
}
for(int i=;i<k;i++)
{
scanf("%I64d",&b[i]);
}
sort(a,a+n);
sort(b,b+k);
ll l=,r=2e9+;
ll ans;
while(l<=r)
{
ll m=(l+r)/;
if(judge(m))
{
r=m-;
ans=m;
}
else l=m+;
}
printf("%I64d\n",ans);
return ;
}
DP:
用dp[i][j]表示前i个人在前j把钥匙中都拿到了钥匙并到达公司的最短时间。(所有人最短时间里的最大值)
可以写出状态转移方程:dp[i][j]=min(dp[i][j-1],max(dp[i-1][j-1]+abs(pos[j]-p))) 最终结果便是dp[n][k].
#include <cstdio>
#include <map>
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
#define mst(a,b) memset((a),(b),sizeof(a))
#define rush() int T;scanf("%I64d",&T);while(T--) typedef long long ll;
const int maxn= ;
const int mod = ;
const ll INF = 1e15;
const double eps = 1e-; int n,k;
ll p;
ll a[maxn];
ll b[maxn];
ll dp[maxn][maxn]; int main()
{
scanf("%d%d%I64d",&n,&k,&p);
for(int i=;i<=n;i++)
{
scanf("%I64d",&a[i]);
}
for(int i=;i<=k;i++)
{
scanf("%I64d",&b[i]);
}
sort(a+,a++n);
sort(b+,b++k);
mst(dp,);
for(int i=;i<=n;i++)
for(int j=i;j<=k;j++)
{
if(i==j)
dp[i][j]=max(dp[i-][j-],abs(a[i]-b[j])+abs(b[j]-p)); //由j>=i,故i==j时特判
else dp[i][j]=min(dp[i][j-],max(dp[i-][j-],abs(a[i]-b[j])+abs(b[j]-p)));
}
printf("%I64d\n",dp[n][k]);
return ;
}
Codeforce Round #424的更多相关文章
- Codeforce Round #643 #645 #646 (Div2)
codeforce Round #643 #645 #646 div2 Round #643 problem A #include<bits/stdc++.h> using namespa ...
- CodeForce Round#49 untitled (Hdu 5339)
Untitled Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- Codeforce Round #216 Div2
e,还是写一下这次的codeforce吧...庆祝这个月的开始,看自己有能,b到什么样! cf的第二题,脑抽的交了错两次后过了pretest然后system的挂了..脑子里还有自己要挂的感觉,果然回头 ...
- Codeforce Round #228 Div2
这次的A题没注意要到100- -, B题没做,后来做要注意下1和long long C题当时坑的一B,用了个蠢办法,后来还错了,现在改了,还是蠢办法,等等再去用dp吧,而且本来就只有01用个鸡巴的树状 ...
- Codeforce Round #227 Div2
这回的看错时间了! 发现理论可以涨分的- -
- Codeforce Round #226 Div2
这次CF虽然,但是- - 第一题看了很久的题目意思额,虽然慢了点- -,但还算没出错,还学会了hack了- -,还+了100- - 第二题想了很久- -...后来发现可以暴力- -,哎 第三题本来也应 ...
- Codeforce Round #225 Div2
这回的C- -,弄逆序,我以为要弄个正的和反的,没想到是等价的,弄两个还是正确的,结果我又没注意1和0只能指1个方向,结果弄了4个,取了4个的最小值就错了,自己作死没弄出来...,后面又玩去了...哎 ...
- Codeforce Round #224 Div2
一下子没打,这比赛,就被虐成狗!
- Codeforce Round #222 Div2
这场断网,本来有个别人的比较卡的无线 但后面睡着了- -! C:额,逆向想下! B:... A:...
随机推荐
- 如何在picture上显示透明Label
- Go语言中数组的内部实现和基础功能
数组的内部实现和基础功能 因为数组是切片和映射的基础数据结构.理解了数组的工作原理,有助于理解切片和映射提供的优雅和强大的功能. 内部实现 在Go语言里,数组是一个长度固定的数据类型,用于存储一段具有 ...
- jQuery 虚拟数字键盘代码
先上效果: js直接应用: $('input').mynumkb(); 就出来效果 HTML: <input maxlength="4" type="tex ...
- Go 采用 time.After 实现超时控制
场景: 假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅.简洁的实现呢? 我们可以采用select+time.After的方式,十分简单适用的实现. time.After()表示time. ...
- sublime的Package Control的安装及使用
一.快速安装 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码(注意下面代码为一行): import urllib.request,os; pf = ...
- SQLite基础-6.运算符
目录 SQLite 运算符 1. 运算符 2. 算数运算符 3. 比较运算符 4. 逻辑运算符 SQLite 运算符 1. 运算符 首先,问大家运算符是什么?运算符在很多领域均用使用.它也分很多中,常 ...
- 阿里云日志服务 ilogtail 卸载方法
之前使用阿里云日志服务,按照文档安装了ilogtail.后面不需要了,却找不到卸载文档.仔细查看ilogtail的安装脚本后,发现里面有卸载方法. wget http://logtail-releas ...
- charles 抓包 (二)
本文基于charles 抓包 https (1)中的配置完成. 1.移动设备上的网络请求 打开要调试的APP,请求就会先发送到Charles,然后验证是否允许访问. 当点击允许后,可以在Proxy - ...
- c# word excel text转html的方法
首先是预览图片,这个功能很好实现,无非就是创建一个html页面,嵌套一个<img>,为了限制图片类型,可以定义一个允许预览类型数组作为限制: /// <summary> /// ...
- 【vue】computed 和 watch
计算属性:computed 监听多个变量且变量是在vue实例中(依赖某个变量,变量发生改变就会触发) 侦听器: watch 监听一个变量的变化 使用场景:watch(异步场景) ...