福建省队集训被虐记——DAY1
今天算是省冬的第一天……早上柯黑出题,说是“信心欢乐赛”,其实是“使你失去信心、不再欢乐的比赛”
顺便orz一下来看这篇文章的各路神犇……求轻虐
水题
(py.cpp/c/pas)
【题目描述】
小呆同学非常的懒,做数学题的时候喜欢用Python 做计算器,写一个脚本,用Python运行一下,把答案写到书上。
2017 年的一天,小呆遇到了一道很难的数学题,有上千个计算步骤,他辛辛苦苦地把需要的Python 脚本写完。但是悲剧发生了,他的Python 解释器坏了,而且由于“特殊”的访问限制,他无法登上www.python.org 重新下载Python 解释器所以他决定自己写一个简单的Python 解释器以满足他的做题要求,但是他没有时间,他还要去做其他的题目,所以他把编写Python 解释器这个艰巨的任务交给了你,一个未来的THUer。
你被要求实现Python 解释器中两种简单的功能:
语句类型格式解释
赋值语句A = B
把B 的值赋给A,这里的B 是一个合法的Python 表达式。
for example:
>>> a = 1 //a=1
>>> b = a + 100 //b=101
输出语句print(A1[;A2; :::])
输出print 后的每一个变量或者常量的值,用空格隔开,整个语句处理完成后输出一个换行符。
for example:
>>> a = 554 //a=554
>>> print(a; 11224)
554 11224
为了降低本问题的难度,特别约定:
• 变量名由5  8 个小写字符构成(’a’-’z’)。
• 表达式中只会出现+-*/ 四种运算符(不存在括号,除法运算符为整除并且使用/ / 表示)。
• 在Python 语言中默认是支持大整数运算的,为了简化问题,保证所有的常量都不大于2^15-1,但不保证输出结果以及中间过程的值不大于2^15-1,即,你有可能需要高精度计算
• 保证出现在赋值语句等号右边的变量以及在输出语句中出现的变量都被赋值过。
• 中间过程及答案可能出现负数。
【输入格式】
从py.in 中输入数据
保证输入文件是一个合法的Python 脚本文件,可以直接用Python3.X 解释运行
【输出格式】
输出到py.out 中
按照题目要求输出
【样例输入】
ctxbve=89+5+29-38
bhzocwv=41-ctxbve-73+10-81+78-ctxbve
kgthkrh=51-bhzocwv+bhzocwv-bhzocwv-ctxbve+41-ctxbve+23
ldvxco=kgthkrh+bhzocwv+kgthkrh-bhzocwv-33-ctxbve-59+57-61
print(bhzocwv)
lmohn=kgthkrh
print(12,77,kgthkrh,kgthkrh,lmohn,kgthkrh,ldvxco,16,29,lmohn,ldvxco)
print(bhzocwv,ldvxco,ctxbve,ldvxco,kgthkrh,kgthkrh,ldvxco)
【样例输出】
-195
12 77 140 140 140 140 99 16 29 140 99
-195 99 85 99 140 140 99
【数据规模与约定】
输入文件长度不超过10000 行。
40% 的数据保证不需要高精度计算。
第一题是神模拟+超级细节题……不仅要手写栈去搞加减乘除的优先级、哈希搞字符串、高精加减乘除,而且还有很坑爹的负数的情况。最重要的是,python运算机制和c++不一样。-3//2在正常计算中是-1,但是在python里-3//2=-2。结果全场爆0了……我承认我对它一点想法都没有……没有7、8千b的代码怎么能搞定……
简单题
(xor.cpp/c/pas)
【题目描述】
小呆开始研究集合论了,他提出了关于一个数集四个问题:
1. 子集的异或和的算术和。
2. 子集的异或和的异或和。
3. 子集的算术和的算术和。
4. 子集的算术和的异或和。
目前为止,小呆已经解决了前三个问题,还剩下最后一个问题还没有解决,他决定把
这个问题交给你,未来的集训队队员来实现。
【输入格式】
从xor.in 中输入数据
第一行,一个整数n。
第二行,n 个正整数,表示a1; a2; :::; an
【输出格式】
输出到xor.out 中
一行,包含一个整数,表示所有子集和的异或和。
【样例输入】
2
1 3
【样例输出】
6
【样例解释】
6 = 1
3
(1 + 3)
【数据规模与约定】
数据分为A,B,C 三类。
A 类数据(20%) 保证:ai > 0,1<=n<=10。
B 类数据(40%) 保证:ai > 0,1<=n<=1000,Σai<=10000。
C 类数据(40%) 保证:ai > 0,1<=n<=1000,Σai<=2000000。
另外,不保证集合中的数满足互异性,即有可能出现ai = aj 且i ̸= j。
这题还是可做的……
首先A类数据就是2^n暴力枚举所有子集,然后算异或和。这样只有20分
B类也比较容易,首先注意到一个显而易见的结论:对于任意x>=0,有x^x=0。
那么显然子集中两两相等的可以约掉。
那么考虑Σai<=10000,想到背包dp还是比较容易的
f[i][j]表示前i个数中凑出的子集的和为j的方案数。那么显然f[i][j]=f[i-1][j]+f[i-1][j-a[i]]
最后计算答案时就是枚举前n个数(就是所有数)组成的子集和,以及这个子集和出现的次数。如果出现偶数次,那么可以两两完全消掉。如果出现奇数次,那就不行啦……
空间上还可以优化成O(Σai)的。就是f[j]=f[j]+f[j-a[i]]
这样就是我写的60分。代码如下:
#include<cstdio>
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,sum,ans;
int f[10010];
int a[1010];
int main()
{
n=read();
for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
f[0]=1;
for (int i=1;i<=n;i++)
for (int j=sum;j>=a[i];j--)
f[j]=f[j]+f[j-a[i]];
for (int i=1;i<=sum;i++)
ans^=(f[i]%2==1)*i;
printf("%d",ans);
}
但是C类数据的Σai是200w级别的,空间上还没有问题,但是时间上O(n*Σai)的20e效率是无法接受的。
想一想B类数据的做法还有哪里可以优化的:
首先f数组对我们有用的并不是整个子集和出现的次数,而是它的奇偶性。因为这个和是否更新答案只和它是奇是偶有关,而与它具体出现次数无关
所以可以考虑用位运算来代替dp的数字更新。
把f压成200w的01串,我们可以考虑每50位用一个long long存0/1状态,这样优化到f[i],i<=200w/50=4w。
而递推就是从前面的i-a[i]转移。
有一种更好的方法是用c++自带的bitset,相当于一个200w位的2进制。然后可以整段的异或。这样相当于每次for i……之后的枚举是O(1)的。
#include<cstdio>
#include<bitset>
using std::bitset;
bitset <2000001> f;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int n,sum,ans;
int a[1010];
int main()
{
n=read();
for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
f[0]=1;
for (int i=1;i<=n;i++) f=f^(f<<a[i]);
for (int i=0;i<=sum;i++)
if (f[i])ans^=i;
printf("%d",ans);
}
看起来bitset还是挺好用的。
我觉得这题是整套题中唯一可做题。
信心题
(cover.cpp/c/pas)
【题目描述】
在二维平面上有若干个多边形,每个多边形都覆盖了一定的区域,它们之间有可能重叠,请求出这些多边形遮住了多大的平面区域。即,求多边形的面积并。
【输入格式】
本题为提交答案题,共有10 个输入,分别是cover1:in  cover10:in。
每个文件第一行,一个整数,表示这个输入文件的序号(1  10)。
接下来一行,一个整数n,表示这组数据中有n 个多边形。
接下来n 行,每行第一个整数Pi,表示这个多边形有Pi 个点,接下来有Pi 组整数,表示这个多边形的Pi 个点的坐标。
【输出格式】
请编写一个程序,根据提供的文件序号输出相应的答案(保留5 位小数)。
【样例输入】
0
1
3 0 0 1 0 1 1
【样例输出】
0.50000
【评分标准】
答案与标准答案偏差不超过2% 的可以获得全部的分数。
答案与标准答案偏差超过20% 的不得分。
其余情况根据下列公式进行评分:
【数据规模与约定】
多边形的点的横纵坐标的绝对值 10^8。
多边形数量不超过10^6。
这是我做过的第一道提交答案题。求多边形面积并。考场上看到100w个多边形实在没思路。后来我发现原来大家做这题都是看数据来想解法的。而我毕竟是太弱了,所以我一直在想一般解法,其实能过就是爷……那些解法都是看数据然后自己手推+yy一下想的。
这里没法把200+M的数据发上来,有点遗憾,因为不看数据自己大讲特讲就没有感觉了
第1、2测试点是只有一个多边形的情况。那么如果这是凸多边形直接凸包搞一下,然后围着一个点切成n-2个三角形,再用叉积算面积最后加在一起。但是出题人心态不好,题目描述上说是x、y<=10^8,但是实际上有x,y<=10^12的数据。这样算叉积的时候有24位long long会爆。所以中间过程要用dobule。
然而一中李泽龙大神指出有可能是凹多边形,所以要三角剖分……我不会QAQ
第3、4测试点有几个多边形,但是两两之间不相交,所以做法同上就可以
第5、6测试点有点坑……好像他们都是这里错了,因为前面的数据都是规则的长方形,但是出题人心态又不好了,在中间加了几个小正方形包含在前面的大正方形里面,这样依然没有交点,但是里面的面积显然是不能算的。但是李泽龙因为误差小于2%还A了……rp太高能说什么呢
后面差不多都是长方形+有相交的情况了(因为没仔细看数据)这用线段树搞矩形面积并就没问题了。
总之这些都是我在考完之后才会的。所以我第三题爆蛋了
总之我第一天就只有60分
其实分析一下主要还是经验不够。在考场上打暴力经验不足,对于提交答案题应该根据数据有的放矢,这样才有做出来的希望。
另外,提交答案题的暴力好像要一开始就去打,这样让它多跑一会儿……
福建省队集训被虐记——DAY1的更多相关文章
- 福建省队集训被虐记——DAY2
唉--第二天依然被虐--但是比第一天好一点--我必须负责任的指出:志灿大神出的题比柯黑的不知道靠谱到哪里去了--柯黑出的简直不可做 但是被虐的命运是无法改变的--求各位神犇别D我 黄巨大真是强啊,不愧 ...
- 福建省队集训被虐记——DAY4
啊啊啊啊啊啊第四天考的是我最不擅长的图论--整个人都斯巴达了 //另外不得不吐槽下午的上课讲的都是网络流--难道是出题人觉得图论里除了网络流以外的其他算法都没有人权图样图森破? 愚蠢的算法(clums ...
- 福建省队集训被虐记——DAY3
昨天没写--今天补上吧 一如既往的跪了 棋盘 [问题描述] 给出一个N*M的方格棋盘,每个格子里有一盏灯和一个开关,开始的时候,所有的灯都是关着的.用(x, y)表示第x行,y列的格子.(x, y)的 ...
- zju 校队选拔 被虐记
选拔已经开始了三天才想起来写游记 QAQ.. 7.12 弱弱的Sky_miner来到了ZJU,过程中被热成狗... 然后见到了无数大二大三的大佬们,过程中被热成狗... 后来听靖哥哥说集训的注意事项, ...
- JS省队集训记
不知不觉省队集训已经结束,离noi也越来越近了呢 论考前实战训练的重要性,让我随便总结一下这几天的考试 Day 1 T1 唉,感觉跟xj测试很像啊?meet in middle,不过这种题不多测是什么 ...
- HN2018省队集训
HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...
- 2018HN省队集训
HNOI2018省队集训 Day 1 流水账 T1 tree 换根+求\(lca\)+求子树和,一脸bzoj3083遥远的国度的既视感.子树和讨论一下就好了,\(lca\)?也是大力讨论一波. 先写了 ...
- 2017FJ省队集训 游记
2017FJ省队集训 游记 又是一篇流水账 Day 1 今天是省队集训的第一天.早上骑车去八中,到的时候汗流太多浑身湿透被杨哥哥和runzhe2000 d了,一个说我去游泳了一个说我打球了...流完汗 ...
- [2018HN省队集训D9T1] circle
[2018HN省队集训D9T1] circle 题意 给定一个 \(n\) 个点的竞赛图并在其中钦定了 \(k\) 个点, 数据保证删去钦定的 \(k\) 个点后这个图没有环. 问在不删去钦定的这 \ ...
随机推荐
- cf492B Vanya and Lanterns
B. Vanya and Lanterns time limit per test 1 second memory limit per test 256 megabytes input standar ...
- maven compile时出现“非法字符: \65279”的解决
我碰到的这个问题是因为Java文件编码为UTF-8 BOM格式导致:解决这个可以使用UltraEdit. 用UltraEdit打开出问题的Java文件,将文件另存为,在保存对话框的编码中选择UTF-8 ...
- HDU4821---字符串hash,map判重
这是2013年长春区域赛的铜牌题...然而第一次做的时候一直觉得会超时的..最后才知道并没有想象中的那么恐怖: 这题有两个注意的地方: (1)h[i] = h[i-1] * seed + s[i] - ...
- 用BFS和DFS解决圆盘状态搜索问题
人工智能课程的实验(我的解法其实更像是算法课程的实验) 用到的算法:深度优先搜索.宽度优先搜索(状态扩展的不同策略) 数据结构:表示状态的结构体.多维数组 (可能是最近做算法竞赛题的影响,这次并不像以 ...
- c语言验证哥德巴赫猜想(从4开始 一个偶数由两个质数之和)
#include <stdio.h> #include <stdlib.h> #include <math.h> int isit(int num) { int i ...
- python标准库之字符编码详解
codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...
- maven-Android项目环境搭建
参考:http://blog.csdn.net/earbao/article/details/40741051 android maven环境搭建: 1.Maven的版本要求3.1.1 2.设置AND ...
- (转)iOS7界面设计规范(8) - UI基础 - 术语和措辞
讨厌周一,讨厌一周.今天中午交互组聚餐,却很开心:大家都是很厉害的人,你可以感到他们身上的能量,可以感到有些什么东西正在推着自己尽力向前走.这是一种很健康的状态,同时也很难得,自然越发需要珍惜.从无到 ...
- 布局神器:Flexbox
最近的工作内容大多是移动端网页的开发,百分比布局,Media Queries,Bootstrap等常规的响应式/自适应的开发技术皆一一试过,但觉以上都不够灵活,所以,一直再尝试寻求更加灵活的精确的移动 ...
- 初学者学Java设计模式(一)------单例设计模式
单例设计模式 单例设计模式是指一个类只会生成一个对象,优点是他可以确保所有对象都访问唯一实例. 具体实现代码如下: public class A { public static void main(S ...