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 直 ...
随机推荐
- 2668: [cqoi2012]交换棋子
Description 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. Input 第一行 ...
- Hive学习之路 (十六)Hive分析窗口函数(四) LAG、LEAD、FIRST_VALUE和LAST_VALUE
数据准备 数据格式 cookie4.txt cookie1, ::,url2 cookie1, ::,url1 cookie1, ::,1url3 cookie1, ::,url6 cookie1, ...
- 【原创】大叔经验分享(53)kudu报错unable to find SASL plugin: PLAIN
kudu安装后运行不正常,master中找不到任何tserver,查看tserver日志发现有很多报错: Failed to heartbeat to master:7051: Invalid arg ...
- 常用的sql语法_Row_Number
可用来分页,也可以用来egg:获取同类型的最新的信息 ROW_NUMBER() 说明:返回结果集分区内行的序列号,每个分区的第一行从1开始.语法:ROW_NUMBER () OVER ([ < ...
- virtualbox+vagrant学习-2(command cli)-15-vagrant resume命令
Resume 格式: vagrant resume [vm-name] 这将恢复先前挂起的vagrant托管计算机,可能与suspend命令一起使用. 默认情况下,配置的预配置程序在运行该命令时将不再 ...
- Python自动化之logging模块
Logging模块构成 主要分为四个部分: Loggers:提供应用程序直接使用的接口 Handlers:将Loggers产生的日志传到指定位置 Filters:对输出日志进行过滤 Formatter ...
- vs未能正确加载XXX包,编译时停止工作问题
出现这个问题的原因可能是配置更改或安装了另一个扩展,幸好之前用的不多,重新进行用户配置代价也不高,打开Visual Studio Tools: 选择VS2013 开发人员命令提示: 输入deven ...
- MFC程序消息处理的顺序
MFC应用程序中处理消息的顺序 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函 ...
- django之models学习总结
from django.db import models # Create your models here. class Classes(models.Model): ''' 班级表 ''' tit ...
- GATK--数据预处理,质控,检测变异
版权声明:本文源自 解螺旋的矿工, 由 XP 整理发表,共 13781 字. 转载请注明:从零开始完整学习全基因组测序(WGS)数据分析:第4节 构建WGS主流程 | Public Library o ...