Codeforces Round #515 (Div. 3) 解题报告(A~E)
题目链接:http://codeforces.com/contest/1066
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define closeio std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
int t,L,v,l,r;
int main()
{
cin>>t;
while(t--)
{
scanf("%d%d%d%d",&L,&v,&l,&r);
int ans = L / v;
ans = ans - (r/v - (l-)/v);
cout<<ans<<endl;
}
return ;
}
1066 B Heaters
题意:Vova的房子由从1到n的房间组成。这些房间从左到右排成一排相互连通,有的房间放着火炉。火炉工作时可以温暖以其所在的第pos个房间为中心, [pos−r+1;pos+r−1]这个区间的所有房间。现在给定n个房间的火炉信息和r,求最少需要开几个火炉可以使整个房子都温暖。
分析:贪心,例如对于起始点1来说,在能覆盖到点1的所有火炉中,我们选最靠后的那一个。之后的每次处理就是把新的第一个没有覆盖到的点看成起始点继续贪心。这样可以保证每次选择覆盖的区间尽可能大。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define closeio std::ios::sync_with_stdio(false)
using namespace std;
const int maxn = ;
int n,r,a[maxn],ans;
bool flag;
int main()
{
int i,j;
while(cin>>n>>r)
{
flag = true;
memset(a,,sizeof(a));
for(i=;i<=n;i++)
scanf("%d",&a[i]);
int pos = ;//pos指向最后放置的炉子的位置
for(i = r;i >= ; i--)
{
if(a[i] == )
{
pos = i;
ans = ;
break;
}
}
if(i == ) flag = false;
while(pos + r - < n && flag)//pos+r-1是当前所放最后一个炉子能覆盖的最右点
{
for(i = pos+r*-;i >= pos; i--)//pos+r*2-1是下一个炉子可以存在的位置的最远点,注意这里值可能比1000大,所以数组范围开大些
{
if(a[i] == )
{
if(i == pos) //pos后的长度为2*r-1的区间没有炉子
flag = false;
else
{
pos = i;
ans ++;
}
break;
}
}
}
printf("%d\n",flag?ans:-);
}
return ;
}
1066 C Books Queries
题意:你有一个书架,可以对它进行三种操作:L id表示把编号为id的书放在所有书的最左边。R id表示表示把编号为id的书放在所有书的最右边。? id表示询问编号为id的书距离整个书列的最外侧(左侧或右侧)的最小值。
分析:题目给定的操作数量和id的范围均为2*1e5,所以可以开一个2*1e5大小的数组存放每本书的位置。我们可以设置posx和posy分别指向书列的左右两侧的位置,当有书放进来时改变posx和posy的值并赋给a[id],查询操作如上所述。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define closeio std::ios::sync_with_stdio(false)
using namespace std;
const int maxn = ;
int a[maxn],id,q,posx,posy;
char c;
int main()
{
cin>>q;
posx = posy = ;
memset(a,,sizeof(a));
while(q--)
{
getchar();
scanf("%c %d",&c,&id);
if(c == 'L')
{
a[id] = posx--;
}
if(c == 'R')
{
a[id] = ++posy;
}
if(c == '?')
{
cout<<min(a[id] - posx - ,posy - a[id])<<endl;
}
}
return ;
}
1066 D Boxes Packing
题意:这个题的题意很蛋疼QAQ不想扯,出题人就是想通过题意把你带跑。其实是最简单的一个题,就是给你n个物品,让你放进m个容量为k的箱子里,要求是只能取从最后一个开始连续的物品,问最多装几个物品。
分析:直接从后往前扫一遍得出答案。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define closeio std::ios::sync_with_stdio(false)
using namespace std;
const int maxn = ;
int n,m,k,ans,pos;
int a[maxn],b[maxn];
int main()
{
int i,j;
while(cin>>n>>m>>k)
{
for(i = ;i <= n; i++)
scanf("%d",&a[i]);
for(i = ;i <= m;i++)
b[i] = k;
j = m;
ans = ;
for(i = n;i >= ; i--)
{
if(b[j] >= a[i])
{
b[j] -= a[i];
ans ++;
}
else
{
if(j > )
{
b[--j] -= a[i];
ans ++;
}
else
{
break;
}
}
}
cout<<ans<<endl;
}
return ;
}
1066 E Binary Numbers AND Sum
题意:给你长为n的二进制数a和长为m的二进制数b,每次操作把a&b的十进制结果累加起来,然后把b往右移一位直到b为0。最后结果对998244353998244353取余。
分析:这个题还是非常不错的一道题的。对于a的每一个为1的二进制位,其对答案的贡献就是所有a&b操作后a的这一位仍为1的次数再乘上这一位为1对应的十进制数。所以我们预处理一下pw数组存放二进制位为1对应的10进制数取余,sum数组则存放前缀和,sum[i]即为第i位及其之前b里有几个1。考虑到n与m可能不相等,我们预处理一下a,b使其长度一致。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define closeio std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
const ll mod = ;
const int maxn = ;
ll n,m,pw[maxn],sum[maxn];
string a,b;
void init_ab()
{
if(n > m) b = string(n-m,'') + b;
else if(m>n) a = string(m-n,'') + a; memset(sum,,sizeof(sum));
memset(pw,,sizeof()); int i,j;
pw[] = ;
for(i = ;i < maxn; i++) pw[i] = pw[i-] * % mod;//预处理pw数组
}
int main()
{
int i,j,k;
while(cin>>n>>m)
{
ll ans = ;
closeio;
a.clear();
b.clear();
cin>>a>>b;
init_ab();
k = max(n,m);
sum[] = b[]=='';
for(i = ;i < k;i++)
sum[i] = sum[i-] + (b[i] == '');//sum[i]存放第i位及其之前b里有多少位为1
for(i = ;i < k;i ++)
{
if(a[i]-'')//a[i]为1才对答案有贡献
{
ans = (ans + pw[k-i-] * sum[i] % mod) % mod;//所有a&b操作后a的这一位仍为1的次数再乘上这一位为1对应的十进制数
}
}
cout<<ans<<endl;
}
return ;
}
Codeforces Round #515 (Div. 3) 解题报告(A~E)的更多相关文章
- Codeforces Round #324 (Div. 2)解题报告
---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- Codeforces Round #380 (Div. 2) 解题报告
第一次全程参加的CF比赛(虽然过了D题之后就开始干别的去了),人生第一次codeforces上分--(或许之前的比赛如果都参加全程也不会那么惨吧),终于回到了specialist的行列,感动~.虽然最 ...
- Codeforces Round #216 (Div. 2)解题报告
又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<]; ,m2=; ;i ...
- Codeforces Round #281 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/493 A题 写完后就交了,然后WA了,又读了一遍题,没找出错误后就开始搞B题了,后来回头重做的时候才发现,球员被红牌罚下场后还可 ...
- Codeforces Round #277 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...
- Codeforces Round #276 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...
- Codeforces Round #350 (Div. 2)解题报告
codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...
- Codeforces Round #479 (Div. 3)解题报告
题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...
随机推荐
- 1015. [JSOI2008]星球大战【并查集】
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- 【bzoj4543】[POI2014]Hotel加强版
题目 抄题解.jpg 发现原来的\(O(n^2)\)的换根\(dp\)好像行不通了呀 我们考虑非常牛逼的长链剖分 我们设\(f[x][j]\)表示在\(x\)的子树中距离\(x\)为\(j\)的点有多 ...
- smooth l1
1.loss要规范化,这样就不会受图片大小的影响 2.w.h采用log:比较特殊的是w,hw,h的regression targets使用了log space. 师兄指点说这是为了降低w,hw,h产生 ...
- Data Binding Android - Type parameter T has incompatible upper bounds : ViewDataBinding and MainAct
Go to your "some_layout.xml" Click right -> Refactor -> Rename (or SHIFT + F6) Renam ...
- R执行报错:Error in `[<-.ts`(`*tmp*`,...only replacement of elements is allowed
原因: pred$mean是Time-Series类型,rbind函数不支持.通过as.double将其转换成double类型即可. 修改前代码: all_predata_time <- dat ...
- 利用MATLAB软件对数码相机进行检校
分享资料:https://pan.baidu.com/s/1FQb-ttLJNJKlMzu-0RjBsw.内部包含张正友的经典论文等文献,官网的checkerboardPattern等.
- 【vue】vue依赖安装如vue-router、vue-resource、vuex等
方式一: 最直接的方式为在 package.json中添加如图依赖配置,然后项目 cnpm install即可 方式二: 根据vue项目的搭建教程,接下来记录下如何在Vue-cli创建的项目中安装vu ...
- oracle 判断字段相等,但类型不同引起的性能问题
最近做ogg数据同步,然后触发器加工数据放入另外一张表,由于数据量很大,一分钟几万条数据,由于一些条件字段类型不匹配,引起ogg阻塞,比较头大.最后分析发现性能问题.请看下图: phmxxh是varc ...
- SM30 客户端 有“不可修改”的状态
SM30维护自定义数据表时,遇到提示信息,有“不可修改”的状态,无法修改数据. 查询详细信息,有一条:客户端特定对象不能在此客户端中进行更改. 检查了一下自定表设置,发现自定义表之前创建时,Deliv ...
- jQuery hide() 参数callback回调函数执行问题
$("#b").click(function() { $("div").hide(1000,bbb); //-------------1 bbb是一个函数,但这 ...