很好奇这周为什么只有Beginner Contest而没有Regular Contest,本来想着去30minAK的,结果1个小时了还有一道题调不出来o(╯□╰)o

A:Parking

让我体验了下开场30sAC的快感......

#include <bits/stdc++.h>

using namespace std;

int main()
{
long long n,a,b;cin >> n >> a >> b;
if(n*a<b) cout << n*a;
else cout << b;
return ;
}

B:Harshad Number

#include <bits/stdc++.h>

using namespace std;

int main()
{
int n;cin >> n;
int temp=n,sum=;
while(temp) sum+=(temp%),temp/=;
if(n%sum==) cout << "Yes";
else cout << "No";
return ;
}

C:Shopping Street

很简单的暴力+位运算,然而直到最后也没调出来......

出来一看题解,发现只有一个地方不同:标程初始化-1<<30,我的初始化-1<<27

猛然发现1<<27到不了1e9,平时为了保险防溢出用1<<27没事,但最值为1e9时初始值要为1<<30或1e9+7

#include <bits/stdc++.h>

using namespace std;
int n;
bool open[][];
long long p[][]; long long cal(int x)
{
long long ret=;
for(int i=;i<=n;i++)
{
int sum=;
for(int j=;j<=;j++)
if(open[i][j] && (x&(<<j))) sum++;
ret+=p[i][sum];
}
return ret;
} int main()
{
cin >> n;
for(int i=;i<=n;i++)
for(int j=;j<=;j++)
cin >> open[i][j];
for(int i=;i<=n;i++)
for(int j=;j<=;j++)
cin >> p[i][j]; long long res=-(<<);
for(int i=;i<=;i++)
{
long long temp=cal(i);
res=max(res,temp);
}
cout << res;
return ;
}

D:Recording

题意:在m个频道中有n个节目需要录制,如第i个节目在start time i~end time i(not included)播放,则在start time i-0.5~end time i(not included)这个时间段中同一台录制机不能在其他频道中进行录制,问至少要多少个录制机?

思路很明显,判断哪个时间点上同时出现的节目最多即可

当时连频道这个数据都没管,直接树状数组对所有时间维护一下,最后选择和最大的时间点即可,结果WA了5发

这道题中有一个题意理解很重要,题中说 [s-0.5,e) 是不能在其他频道中录制。我当时把所有节目都按[s,e]处理了,但事实上题目中暗示如果两个节目属于同一频道,可以连续录制,就没有-0.5这个制约了......(比赛中其实发了clarification,但日文怎么看╮(╯▽╰)╭)

此题除了读题不够细致之外,一开始我有一个很大的问题就是没把频道m这个条件放在心上

在很多时候数据本身及其范围就可以带来很多提示,并从而想到更简便的做法

如果这题使用树状数组,为了对在同一频道中首尾相连的节目特殊处理还需要进行排序,原本的效率优势就没有了

而如果很好的使用了m<30这个条件,可以一个频道一个频道地处理,用差分前缀和优化即可,思路明显清晰

PS:这题中有一个-0.5的操作,本题可以直接在整数上处理,但在其他情况中遇到-0.5时,可将整个数组放大2倍,由s-0.5 ---> 2*s-1

#include <bits/stdc++.h>

using namespace std;
const int MAXN=;
int n,m,st[MAXN],et[MAXN],c[MAXN],pre[MAXN],res[MAXN]; int main()
{
cin >> n >> m;
for(int i=;i<=n;i++) cin >>st[i] >>et[i] >>c[i];
for(int i=;i<=m;i++)
{
memset(pre,,sizeof(pre));
for(int j=;j<=n;j++) if(c[j]==i) pre[st[j]]++,pre[et[j]+]--;
for(int j=;j<MAXN;j++) pre[j]+=pre[j-]; //差分约束和操作
for(int j=;j<MAXN;j++) if(pre[j]>) res[j]++; //因为i,j属于一个频道,所以只能算一次
} int ans=;
for(int i=;i<MAXN;i++) ans=max(ans,res[i]);
cout << ans;
return ;
}

Review:

这次面对4道水题处理的不够好,注意点:

1.在最值很大时一定要特殊考虑不能盲目使用平时的初始化值

2.读题时要对目标对象的限制语好好揣膜摩

3.要利用好每一个数据和范围,尽量不忽略

4.在复杂度允许O(n)操作时,在处理区间和问题时可不用树状数组,而直接使用差分前缀和

[Atcoder 080] A~D Tutorial的更多相关文章

  1. [Atcoder Grand Contest 004] Tutorial

    Link: AGC004 传送门 A: …… #include <bits/stdc++.h> using namespace std; long long a,b,c; int main ...

  2. [Atcoder Regular Contest 060] Tutorial

    Link: ARC060 传送门 C: 由于难以维护和更新平均数的值: $Average->Sum/Num$ 这样我们只要用$dp[i][j][sum]$维护前$i$个数中取$j$个,且和为$s ...

  3. [Atcoder Regular Contest 061] Tutorial

    Link: ARC061 传送门 C: 暴力$dfs$就好了 #include <bits/stdc++.h> using namespace std; typedef long long ...

  4. [Atcoder Regular Contest 065] Tutorial

    Link: ARC065 传送门 C: 最好采取逆序贪心,否则要多考虑好几种情况 (从前往后贪心的话不能无脑选“dreamer”,"er"可能为"erase"/ ...

  5. [Atcoder Regular Contest 064] Tutorial

    Link: ARC064 传送门 C: 贪心+对边界的特殊处理 #include <bits/stdc++.h> using namespace std; typedef long lon ...

  6. [Atcoder Regular Contest 063] Tutorial

    Link: ARC063 传送门 C: 将每种颜色的连续出现称为一段,寻找总段数即可 #include <bits/stdc++.h> using namespace std; ,len; ...

  7. [Atcoder Grand Contest 003] Tutorial

    Link: AGC003 传送门 A: 判断如果一个方向有,其相反方向有没有即可 #include <bits/stdc++.h> using namespace std; ]; map& ...

  8. [Atcoder Regular Contest 062] Tutorial

    Link: ARC 062 传送门 C: 每次判断增加a/b哪个合法即可 并不用判断两个都合法时哪个更优,因为此时两者答案必定相同 #include <bits/stdc++.h> usi ...

  9. [Atcoder Grand Contest 002] Tutorial

    Link: AGC002 传送门 A: …… #include <bits/stdc++.h> using namespace std; int a,b; int main() { sca ...

随机推荐

  1. list互转datatable 支持Nullable转换

    /// <summary> /// list转datatable /// </summary> /// <param name="list">& ...

  2. poj 3104 Drying(二分查找)

    题目链接:http://poj.org/problem?id=3104 Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissio ...

  3. hdu 1272 小希的迷宫(并查集+最小生成树+队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)     ...

  4. Windows下基于python3使用word2vec训练中文维基百科语料(三)

    对前两篇获取到的词向量模型进行使用: 代码如下: import gensim model = gensim.models.Word2Vec.load('wiki.zh.text.model') fla ...

  5. Java案例之随机验证码功能实现

    实现的功能比较简单,就是随机产生了四个字符然后输出.效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来.哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的 ...

  6. 【转】关于Scapy

    关于Scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写).它能够伪造 或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一些典型操作,比 ...

  7. Hadoop-MR[会用]MR程序的运行模式

    1.简介 现在很少用到使用MR计算框架来实现功能,通常的做法是使用hive等工具辅助完成.但是对于其底层MR的原理还是有必要做一些了解. 2.MR客户端程序实现套路 这一小节总结归纳编写mr客户端程序 ...

  8. Vim常用命令(转)—默写版

    1.光标移动 上: 下: 左: 『字母小写』 右: 上一行行首: 『减号』 下一行行首: 行首: 『数字0』 行尾: 单词词尾或后一个单词词尾: 后一个单词词首: 单词词首或前一个单词词首: 跳转到特 ...

  9. P4819 [中山市选]杀人游戏

    题目描述 一位冷血的杀手潜入Na-wiat,并假装成平民.警察希望能在NN个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀手,谁是平民.假如查 ...

  10. linux命令(4):vmstat命令

    CPU监控如下: vmstat 2 10  //表示每隔2秒运行10次 内存监控如下: vmstat –s 监控进程及CPU.内存状态 如下: top