2017 清北学堂 Day 6终极考试报告
预计分数: 100+70+70 = 240
实际假分数 : 40+80+70= 190 in cena(好吧不得不承认这个分数,,,,,,=.=)
实际真分数 : 100+80+100 = 280 in luogu.org
一句话:stl,cena害我一生,,,,,,
消失的数字(number)
Time Limit:1000ms Memory Limit:128MB
题目描述
rsy拥有n个数,这n个数分别是a1,a2,…,an。
后来出现了一个熊孩子zhw,用橡皮擦去了其中若干个数字,并且打乱了剩下的数字。rsy赶到现场后只剩下了m个数字b1,b2,…,bm,她想知道哪些数字被擦去了。
现在你需要告诉rsy被擦去的n-m个数是什么。
输入格式(number.in)
第一行一个数n,第二行n个数ai,表示一开始的数字。
第三行一个数m,第四行m个数bi,表示被擦去后的数字。
输出格式(number.out)
一行n-m个数,从小到大输出所有被擦去的数字。
输入样例
5
1 3 5 7 8
3
3 5 8
输出样例
1 7
数据范围
对于30%的数据n<=1000,ai与bi都是有序的。
对于60%的数据n<=100000,ai与bi都是有序的。
对于80%的数据n<=100000,ai,bi<=n。
对于100%的数据n<=100000,1<=ai,bi<=10^9。
一开始傻乎乎的以为这是一眼题,随手敲了个map+栈感觉肯定AC,然后敲了个vector的暴力开始对拍,各种极端极限数据都没问题
结果!!!!
我还是高估cena了....
60分的超时也是醉了。。。。
在洛谷上最慢的点才700ms,,,,,
╮(╯▽╰)╭,,认命,,,,
正确做法:把两个数组都从小到大排一遍然后在A里把B中出现过得元素都删掉就好
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<map>
using namespace std;
int n,m;
int p;
map<int,int>a;
int maxn=-;
int ans[];
int num=;
int s[];
int top=;
int main()
{
//freopen("number.in","r",stdin);
//freopen("number.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&p);
a[p]=a[p]+;
if(p>maxn)maxn=p;
s[top]=p;top++;
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d",&p);
a[p]=a[p]-;
}
int q=a.size();
while(top!=)
{
int p=s[top];top--;
if(a[p]!=)
{
for(int i=;i<=a[p];i++)
ans[num++]=p;
a[p]=;
}
}
sort(ans+,ans+num);
for(int i=;i<=num-;i++)
printf("%d ",ans[i]);
return ;
}
龟速map+栈
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int a[];
int b[];
int num=;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++)
scanf("%d",&b[i]);
sort(a+,a+n+);sort(b+,b+m+);
for(int i=;i<=n;i++)
{
if(a[i]==b[num])
{
a[i]=;
num++;
}
}
for(int i=;i<=n;i++)
{
if(a[i]!=)
{
printf("%d ",a[i]);
}
}
return ;
}
AC
一道数论好题(math)
Time Limit:1000ms Memory Limit:128MB
题目描述
rsy最近在研究欧几里得算法,不会的同学可以去看下课件以及代码……
现在她想到了一个新的问题,求k个数的最大公约数!
事实上这个问题仍然很简单。所以rsy想强化一下,她觉得最大公约数等于1就不是很有趣了。因此她想在n个数中找最多的数,使得它们的最大公约数不等于1。
现在rsy想知道,能找最多多少个数。
输入格式(math.in)
第一行一个数n。
第二行n个数ai。
输出格式(math.out)
一个数表示答案。
输入样例
5
2 3 4 5 6
输出样例
3
数据范围
对于30%的数据n<=5。
对于50%的数据n<=20。
对于80%的数据n<=1000,ai<=1000。
对于100%的数据1<=n<=100000,1<=ai<=100000,数据几乎是随机的。
当我读完题立马就意思到- - > 骗分狗又要高兴咯=。=
为什么累?
因为这道题是让着求最大公约数
而偶数(也就是%2==0)是最普遍的最大公约数(因为自然数除了奇数就是偶数)
so 如果你能想到把%2==0的数的个数统计一下
那么恭喜你得到70分
但我还是没有这么不要脸滴
so我机智的选择用1000以内的素数筛(感觉自己更不要脸)
然而最后两个点一个莫名其妙的WA一个莫名其妙的TLE.......
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
using namespace std;
int a[];
int num=;
int vis[];
int tot[];
int xx[];
int js=;
int main()
{
for(int i=;i<=sqrt();i++)
if(vis[i]==)
for(int j=i*i;j<=;j=j+i)
vis[j]=;
for(int i=;i<=;i++)
if(vis[i]==)
xx[++js]=i;
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int p;
scanf("%d",&p);
a[++num]=p;
}
for(int i=;i<=js;i++)
{
for(int j=;j<=num;j++)
{
if(a[j]%xx[i]==)
tot[xx[i]]++;
}
}
int maxn=;
for(int i=;i<js;i++)
{
if(tot[xx[i]]>maxn)
maxn=tot[xx[i]];
}
printf("%d",maxn);
return ;
}
80分不知道哪儿错了的代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[];
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int p;
scanf("%d",&p);
a[p]++;
}
int ans=-;
for(int i=;i<=;i++)
{
int maxnnow=;
for(int j=i;j<=;j=j+i)
maxnnow+=a[j];
if(maxnnow>ans)
ans=maxnnow;
}
printf("%d",ans);
return ;
}
AC
扫雷(mine)
Time Limit:1000ms Memory Limit:128MB
题目描述
rsy最近沉迷于一款叫扫雷的游戏。
这个游戏是这样的。一开始网格上有n*m个位置,其中有一些位置有雷。每次rsy可以左键点击一个方块,此时若这个方块是雷,则rsy被炸,游戏结束,否则如果这个位置周围8格有x个雷,则会显示数字x。特别地,当x=0时,系统会自动左键点击附近8个位置。(此时附近8个位置一定没有雷,假如附近8个位置仍存在x=0,则继续往外扩展)想要更进一步获得关于题目的信息,打开程序->附近->游戏->扫雷或者直接打开下发的可执行文件。
或者rsy右键点击一个位置,标注这个位置是雷。
不幸的是,她鼠标不能左右键同时点击,因此只需考虑她左键点击与右键点击就可以了。
注意游戏胜利的条件是所有非雷的位置都被左键点击到。(特别地,当一开始时n*m个位置都是雷时,LYK自动获得胜利)
rsy从网上下载了金手指,很轻易地就掌握了所有雷所在的位置。rsy想通过最少的点击次数获得胜利(这里的点击次数不包括系统自动点击)。于是他来请求你的帮助。
输入格式(mine.in)
第一行两个数n,m。
接下来n行,每行m个数ai,j,表示这个矩阵。若ai,j=’*’则表示这个位置是雷,若ai,j=’.’则表示不是雷。
输出格式(mine.out)
一个数表示答案。
输入样例
3 3
..*
...
..*
输出样例
2
对于30%的数据n=1;
对于另外20%的数据n,m<=3;
对于再另外20%的数据*大致占矩阵的2/3且数据随机。
对于100%的数据n,m<=1000。
Hint:
适度游戏益脑,沉迷游戏伤身。ok
一开始看这题还是有些懵逼的,但是手动过了一把扫雷之后就明白了
只要照着0一顿乱点就可以了呗。。。
然而!!!!
因为搜索需要,我机(tou)智(lan)的开了4个queue队列,
结果,,,,
最后三个点超时。。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
using namespace std;
int n,m;
int a[][];
int vis[][];
char p;
int xx[]={-,+,,,-,-,+,+};
int yy[]={,,-,+,-,+,-,+};
queue<int>qx;
queue<int>qy;
int ans=;
void deal(int nowx,int nowy)
{
queue<int>needx;
queue<int>needy;
needx.push(nowx);
needy.push(nowy);
while(needx.size()!=&&needy.size()!=)
{
int nowneedx=needx.front();needx.pop();//当前为0的元素
int nowneedy=needy.front();needy.pop();
for(int i=;i<;i++)
{
int wx=nowneedx+xx[i];
int wy=nowneedy+yy[i];
if(wx>=&&wx<=n&&wy>=&&wy<=m)
{
if(a[wx][wy]==&&vis[wx][wy]==)
{
needx.push(wx);
needy.push(wy);
}
vis[wx][wy]=;
} }
} }
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{cin>>p; if(p=='*') a[i][j]=;}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
for(int k=;k<;k++)
{
if(a[i][j]!=&&a[i+xx[k]][j+yy[k]]==&&i+xx[k]>=&&i+xx[k]<=n&&j+yy[k]>=&&j+yy[k]<=m)
a[i][j]++;
}
if(a[i][j]==&&vis[i][j]==)
{qx.push(i);qy.push(j);vis[i][j]=;}
}
}
memset(vis,,sizeof(vis));
while(qx.size()!=&&qy.size()!=)
{
int nowx=qx.front();qx.pop();
int nowy=qy.front();qy.pop();
if(vis[nowx][nowy]==)
{
ans++;
vis[nowx][nowy]=;
deal(nowx,nowy);
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(vis[i][j]==&&a[i][j]!=)
ans++;
}
}
printf("%d",ans);
return ;
}
开了4个queue不想改反正在洛谷AC的代码
总结:这次考试终于发挥出真正水平了,但成绩仍然一般,,。,。虽然原因很多吧,但是也反映出了我的很多弱点:
1.思路太窄,第一题明明可以想到O(n*m)的做法,但是自己还是明知map慢偏用map做,其实有时候完全可以不用使劲照着一种思路走到死胡同,说不定换个角度就是海阔天空呢?
2.对极限和极端数据的分析不够深入,特别是在写对拍的时候,一定不要只注意程序在极限数据的结果,必须要先确保程序的运行时间在允许范围之内!
2017 清北学堂 Day 6终极考试报告的更多相关文章
- 2017清北学堂(提高组精英班)集训笔记——动态规划Part3
现在是晚上十二点半,好累(无奈脸),接着给各位——也是给自己,更新笔记吧~ 序列型状态划分: 经典例题:乘积最大(Luogu 1018) * 设有一个长度为 N 的数字串,要求选手使用 K 个乘号将它 ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 7月清北学堂培训 Day 3
今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...
- 2017 五一 清北学堂 Day1模拟考试结题报告
预计分数:100+50+50 实际分数:5+50+100 =.= 多重背包 (backpack.cpp/c/pas) (1s/256M) 题目描述 提供一个背包,它最多能负载重量为W的物品. 现在给出 ...
- 2016.10.29 清北学堂NOIP冲刺班Day1 AM 考试总结
成绩:满分300,我得了200, 1:90//前两个题目都是模拟,没用到什么其他算法,第一题有可能少考虑了一点细节 2:100 3:10//感觉是个DP,但是毫无思路,只打了个普通背包,10分而已. ...
- AC日记——C’s problem(c) TYVJ P4746 (清北学堂2017冬令营入学测试第三题)
P4746 C’s problem(c) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描述 小C是一名数学家,由于它自制力比 ...
随机推荐
- hibernate Criteria中or和and的用法
/s筛选去除无效数据 /* detachedCriteria.add( Restrictions.or( Restrictions.like("chanpin", &qu ...
- python_xrange和range的异同
1,range: 函数说明:range([start,]stop[,step]),根据start和stop的范围以及步长step生成一个序列 代码示例: >>> range(5) [ ...
- 线段树优化建图(cf787d, 2019Wannafly Winter Camp Day7 Div1 E)
线段树优化建图,用于区间到区间建边时降低空间复杂度 建立两颗线段树,一颗in, 代表进入这个区间,一颗out,代表从这个区间出去 in树从父亲向儿子建边,代表宏观进入整个区间,不向下寻找 out树从儿 ...
- Eigen::Map
http://cherishlc.iteye.com/blog/2116800 Map类 是 矩阵库Eigen中用来将内存数据 映射为 任意形状的矩阵的类.
- Windows下启动停止Oracle11g服务-为解决系统变慢而生
我们拿Oracle 11g作为例子. 首先在“开始=〉运行”中输入“services.msc”,按回车,进入“服务”控制台, 将 Oracle ORCL VSS Writer Service.Orac ...
- POJ3734【状压枚举】
题意: 给你两个01矩阵,去掉矩阵B的某些行和某些列,问处理后的矩阵B能否变成矩阵A: 思路: 数据较小,状压枚举B矩阵列的数量=A矩阵列的数量时的状态,然后搞定了列,贪心判断B矩阵的行就好了: #i ...
- uoj#418. 【集训队作业2018】三角形(线段树合并)
传送门 好迷啊--膜一下ljz 考虑每个操作,如果把操作按先后顺序放到序列上的话,操作一就是把\(w_i\)的石子放到某个节点,那么就是在序列末端加入\(w_i\),然后根据贪心肯定要把它所有儿子的石 ...
- DOM0、DOM2级事件
JavaScript DOM0.DOM2级事件 1.DOM0级事件:on+事件类型 在html行内直接绑定,也就是通过行内js绑定的例如<span onclick="alert('1' ...
- PJzhang:互联网是有国界
猫宁!!! 参考链接:https://mp.weixin.qq.com/s/NFgps_5HBpl3ZjDoR5w8XA 上世纪90年代,互联网开始崛起,美国凭借超级大国的地位,先进技术优势,以美国公 ...
- php-fpm 高并发 参数调整
工作中经常会遇到会给客户配置服务器,其中有的客户还会有并发量要求,其中也会必须要用负载均衡承载压力的.增加服务器数量肯定能有效的提升服务器承载能力,但只有根据目前已有配置设置好单台服务器才能更好的发挥 ...