NOIp2017总结
来源:互联网 发布:南平广电网络招聘 编辑:程序博客网 时间:2024/05/17 08:29
NOIp2017 反思总结
Day0
白天看了下sh的语法和vimrc,去__debug的博客看了一些黑科技。
晚上睡的特别早。
Day1
起的比以往都早,感觉自己好勤快啊。老爸更早还买了早饭回来
T1
简直不敢相信自己的眼睛?几行完事简直不是T1风格。
考场上连公式都不信,硬要打表看看。
#include <bits/stdc++.h>#define LL long longusing namespace std ;int main() { freopen ( "math.in", "r", stdin ) ; freopen ( "math.out", "w", stdout ) ; LL a, b ; cin >> a >> b ; cout << a*b-a-b << endl ; return 0 ;}
- 最终100pt
T2
除了字符串略微恶心之外也没什么,但是我还是调了好久,主要原因还是对字符串处理不太熟练吧。
过了大样例就直接跑掉没管了,当时已经10:30了。
最终还是F语句里的数字只用了首位……
这还有90pt??辣鸡数据
先贴考场原文件吧
#include <bits/stdc++.h>using namespace std ;void File() { freopen ( "complexity.in", "r", stdin ) ; freopen ( "complexity.out", "w", stdout ) ;}const int maxm = 105 ;int n, m, stk[maxm], top = 0 ;char c[maxm], t[maxm], p[maxm] ;bool vis[35] ;int l[maxm], r[maxm], s[maxm], maxx[maxm] ;void init() { top = 0 ; memset ( vis, 0, sizeof vis ) ; memset ( s, 0, sizeof s ) ; memset ( stk, 0, sizeof stk ) ; memset ( l, 0, sizeof l ) ; memset ( r, 0, sizeof r ) ; memset ( maxx, 0, sizeof maxx ) ;}void solve() { //puts("") ; int i ; bool ok = 1 ; scanf ( "%d %s", &m, c+1 ) ; for ( i = 1 ; i <= m ; i ++ ) { scanf ( "%s", p+1 ) ; if (p[1] == 'F') { ++top ; scanf ( "%s", p+1 ) ; if (vis[p[1]-'a']) { //printf ( "%d %c\n", i, p[1] ) ; ok = 0 ; } t[top] = p[1] ; vis[p[1]-'a'] = 1 ; scanf ( "%s", p+1 ) ; s[top] = 0 ; l[top] = r[top] = -1 ; if (p[1] == 'n') s[top] = -1 ; else l[top] = p[1]-'0' ; scanf ( "%s", p+1 ) ; if (p[1] == 'n') { if (s[top] == -1) s[top] = 0 ; else s[top] = 1 ; } else r[top] = p[1]-'0' ; } else { if (s[top] == -1) ; else if (s[top] > 0) { maxx[top-1] = max(maxx[top-1], s[top]+maxx[top]) ; } else if (l[top] <= r[top]) maxx[top-1] = max(maxx[top-1], maxx[top]) ; vis[t[top]-'a'] = 0 ; maxx[top] = 0 ; -- top ; if (top < 0) { //printf ( "%d top=%d\n", i, top ) ; ok = 0 ; } } //printf ( "top=%d s=%d maxx=%d\n", top, s[top], maxx[top] ) ; } //for ( i = 0 ; i <= m ; i ++ ) printf ( "t %d = %c\n", i, t[i] ) ; //for ( i = 0 ; i < 30 ; i ++ ) if (vis[i]) printf ( "%c\n", i+'a' ) ; if ((m&1) || ok==0 || top!=0) { //printf ( "m=%d ok=%d top=%d\n", m, ok, top ) ; puts("ERR") ; return ; } //for ( i = 0 ; i <= m ; i ++ ) printf ( "%d s=%d maxx=%d\n", i, s[i], maxx[i] ) ; int cc ; if (c[3] == '1') cc = 0 ; else { for ( cc = 0, i = 1 ; !isdigit(c[i]) ; i ++ ) ; for ( ; isdigit(c[i]) ; i ++ ) cc = cc*10 + c[i] - '0' ; } s[0] += maxx[0] ; //printf ( "cc=%d s=%d\n", cc, s[0] ) ; if (cc == s[0]) puts("Yes") ; else puts("No") ;}int main() { File() ; int _ ; scanf ( "%d", &_ ) ; while (_--) { init() ; solve() ; } return 0 ;}
- 最终90pt
真的辣鸡,连那里都忘记了
#include <bits/stdc++.h>using namespace std ;void File() { freopen ( "complexity.in", "r", stdin ) ; freopen ( "complexity.out", "w", stdout ) ;}const int maxm = 105 ;int n, m, stk[maxm], top = 0 ;char c[maxm], t[maxm], p[maxm] ;bool vis[35] ;int l[maxm], r[maxm], s[maxm], maxx[maxm] ;void init() { top = 0 ; memset ( vis, 0, sizeof vis ) ; memset ( s, 0, sizeof s ) ; memset ( stk, 0, sizeof stk ) ; memset ( l, 0, sizeof l ) ; memset ( r, 0, sizeof r ) ; memset ( maxx, 0, sizeof maxx ) ;}void solve() { int i, x, j, len ; bool ok = 1 ; scanf ( "%d %s", &m, c+1 ) ; for ( i = 1 ; i <= m ; i ++ ) { scanf ( "%s", p+1 ) ; if (p[1] == 'F') { ++top ; scanf ( "%s", p+1 ) ; if (vis[p[1]-'a']) ok = 0 ; t[top] = p[1] ; vis[p[1]-'a'] = 1 ; scanf ( "%s", p+1 ) ; s[top] = 0 ; l[top] = r[top] = -1 ; if (p[1] == 'n') s[top] = -1 ; else { len = strlen(p+1) ; x = p[1]-'0' ; for ( j = 2 ; j <= len ; j ++ ) x = 10*x + p[j] - '0' ; l[top] = x ; } scanf ( "%s", p+1 ) ; if (p[1] == 'n') { if (s[top] == -1) s[top] = 0 ; else s[top] = 1 ; } else { len = strlen(p+1) ; x = p[1]-'0' ; for ( j = 2 ; j <= len ; j ++ ) x = 10*x + p[j] - '0' ; r[top] = x ; } } else { if (s[top] == -1) ; else if (s[top] == 1) { maxx[top-1] = max(maxx[top-1], 1+maxx[top]) ; } else if (l[top] <= r[top]) maxx[top-1] = max(maxx[top-1], maxx[top]) ; vis[t[top]-'a'] = 0 ; maxx[top] = 0 ; -- top ; if (top < 0) ok = 0 ; } } if ((m&1) || ok==0 || top!=0) { puts("ERR") ; return ; } int cc ; if (c[3] == '1') cc = 0 ; else { for ( cc = 0, i = 1 ; !isdigit(c[i]) ; i ++ ) ; for ( ; isdigit(c[i]) ; i ++ ) cc = cc*10 + c[i] - '0' ; } s[0] += maxx[0] ; if (cc == s[0]) puts("Yes") ; else puts("No") ;}int main() { File() ; int _ ; scanf ( "%d", &_ ) ; while (_--) { init() ; solve() ; } return 0 ;}
T3
本来觉得可以打出正解的,时间有点紧,也心急了。
瞎打一通发现除了浪费时间之外就毫无意义了。
最后想骗拓扑序的分都写WA了,真的菜。
懒得贴代码了,毫无意义。
- 最终20pt。
- 然而现在并没有改完,留坑。
下午晚上把农药的2h限制都打完了所以晚上只能玩电脑。
颓的不行。10:30睡并没有前一天早。
Day2
起的和昨天一样早,但是并不是很精神。
吃完早饭好些了,在大巴上精力就比较充沛了。
T1
简直在逗我笑,9:20打完跑了。
但是后来发现最大数据可以爆long long,心惊胆战了几天,但是redbag告诉我ccf并没有卡掉。 简直感激
#include <bits/stdc++.h>#define LL long longusing namespace std ;void File() { freopen ( "cheese.in", "r", stdin ) ; freopen ( "cheese.out", "w", stdout ) ;}const LL maxn = 1050 ;LL n, m, h, r ;bool vis[maxn] ;struct node { LL x, y, z ;} s[maxn] ;LL dist ( node a, node b ) { LL d = 0 ; d = (a.x-b.x)*(a.x-b.x) ; d += (a.y-b.y)*(a.y-b.y) ; d += (a.z-b.z)*(a.z-b.z) ; return d ;}queue <LL> Q ;void init() { memset ( vis, 0, sizeof vis ) ; while (!Q.empty()) Q.pop() ;}void solve() { LL i, x ; r = r*r ; for ( i = 1 ; i <= n ; i ++ ) if (s[i].z*s[i].z <= r) { Q.push(i) ; vis[i] = 1 ; } while (!Q.empty()) { x = Q.front() ; Q.pop() ; for ( i = 1 ; i <= n ; i ++ ) if (vis[i] == 0&&dist(s[x], s[i]) <= 4*r) { Q.push(i) ; vis[i] = 1 ; } } for ( i = 1 ; i <= n ; i ++ ) if (vis[i] && (s[i].z-h)*(s[i].z-h) <= r) { puts("Yes") ; return ; } puts("No") ;}int main() { File() ; LL i, _ ; scanf ( "%lld", &_ ) ; while (_--) { init() ; scanf ( "%lld%lld%lld", &n, &h, &r ) ; for ( i = 1 ; i <= n ; i ++ ) scanf ( "%lld%lld%lld", &s[i].x, &s[i].y, &s[i].z ) ; solve() ; } return 0 ;}
- 最终得分100pt
T2
想了一下,发现并不会,就先打了T3的30pt暴力。然后才回来看这一题。
看了下数据范围,简直就是写着状态压缩DP。
然而发现好像还是不会。
最终弃了正解,目标改成70pt。
设
式子好推的很,枚举子树合并即可。
mmp,最后出来才发现这是正解???没有什么优化就交了???
不过还是怪自己不会枚举子集的骚操作。
先贴下考场代码
#include <bits/stdc++.h>#define LL long longusing namespace std ;void File() { freopen ( "treasure.in", "r", stdin ) ; freopen ( "treasure.out", "w", stdout ) ;}const LL maxn = 15, maxS = (1<<12)+5, zhf = 1e9 ;LL n, m, g[maxn][maxn], f[maxn][maxn][maxS] ;LL bt[maxS], v[maxn][maxn][maxS] ;bool have ( LL s, LL x ) { s >>= x-1 ; return s&1 ;}LL check_min ( LL &a, LL b ) { return a = a<b? a:b ; }int main() { File() ; LL rec, d, i, j, S, s, s1, s2, x, u ; scanf ( "%lld%lld", &n, &m ) ; S = (1<<n)-1 ; for ( i = 0 ; i <= n ; i ++ ) for ( j = 0 ; j <= n ; j ++ ) { g[i][j] = zhf ; for ( s = 0 ; s <= S ; s ++ ) f[i][j][s] = zhf ; } for ( i = 1 ; i <= m ; i ++ ) { scanf ( "%lld%lld%lld", &x, &u, &rec ) ; check_min(g[x][u], rec) ; g[u][x] = g[x][u] ; } bt[0] = 0 ; for ( i = 1 ; i <= S ; i ++ ) bt[i] = bt[i>>1]+(i&1) ; for ( i = 1 ; i <= n ; i ++ ) for ( j = 0 ; j <= n ; j ++ ) f[i][j][1<<(i-1)] = 0 ; int bit ; for ( bit = 2 ; bit <= n ; bit ++ ) for ( s = 0 ; s <= S ; s ++ ) { if (bt[s] != bit) continue ; for ( s1 = 0 ; s1 <= S ; s1 ++ ) { if (bt[s1]==0 || bt[s1] >= bit) continue ; s2 = s^s1 ; if ((s1&s2)!=0 || (s1|s2)!=s) continue ; for ( x = 1 ; x <= n ; x ++ ) { if (have(s1,x)==0) continue ; for ( u = 1 ; u <= n ; u ++ ) { if (have(s2,u)==0) continue ; if (g[x][u] == zhf) continue ; for ( d = 1 ; d <= n ; d ++ ) { rec = f[x][d-1][s1] + f[u][d][s2] + d*g[x][u] ; if (f[x][d-1][s] > rec) { f[x][d-1][s] = rec ; v[x][d-1][s] = v[x][d-1][s1] + v[u][d][s2] + g[x][u] ; } else if (f[x][d-1][s] == rec) { check_min(v[x][d-1][s], v[x][d-1][s1]+v[u][d][s2]+g[x][u]) ; } } } } } } LL ans = zhf ; for ( i = 1 ; i <= n ; i ++ ) check_min(ans, f[i][0][S]) ; printf ( "%lld\n", ans ) ; return 0 ;}
- 最终得分80pt。
然后改了一点枚举方法就行。
T3
直接模拟。懒得贴代码了。
还没改,留坑。
- 最终得分30pt
中午聚完餐,回家睡了觉好的。
晚上嘛……
( ̄▽ ̄)
After All
最终得分420,全省排名44。
考试的时候坑自己,两天T2煮熟的鸭子都飞了。(雾)
考试的时候心态明显没有平常好,考前20min还在床上?(大雾)
不过考试的时候会发挥低于正常水平也是意料之中的事情,都过去了也不要再多说了。接下来干什么?有些迷茫,先搞搞文化休息一下脑袋吧。
现在的化学课都成了美术课了,还有翻生物、化学书就像字典???不打算退组,但是这个星期也不打算停课。
不如颓颓文化,某些人说的好听点是要冲冬令营实际上不就是在逃避文化课?和猫还有赛克做了下ACM北京的同步赛,我就是去搞笑(混饭吃)的?
代码能力奇差。准备趁这点时间把不会的东西都学了,但是绝对不能把脑袋做傻。
换了个座位,在机房少搞颓。
坐在fastest旁边感觉快到模糊,瞎写了几道杜教筛。
还把redbag赶到一边去了,(然而她似乎并没有怼我
11-23:逃课搞竞赛被抓,偷鸡不成蚀把米,很不爽2333
- NOIP2017总结
- NOIP2017总结
- NOIP2017总结
- NOIP2017总结
- Noip2017总结
- noip2017总结
- noip2017总结
- NOIP2017总结
- NOIP2017总结
- 【NOIP2017】总结
- noip2017总结
- NOIp2017总结
- NOIP2017总结
- NOIP2017总结
- NOIP2017总结
- noip2017 初赛总结
- NOIP2017 赛前总结
- 【NOIP2017模拟11.2】总结
- 常见编码方式之间的区别
- 【Scikit-Learn 中文文档】特征选择
- SSM框架集成
- 面试之Java持久层(十)
- HDFS 开启 SCR 对 Hbase 的性能提升
- NOIp2017总结
- H5调用摄像头
- hdu_2008 数值统计
- AWS_EC2_Ubuntu安装gitlab失败
- 【YOLO】darkflow windows10 x64 下安装踩过的坑
- dedecms中PC和移动端后台后,图片路径处理
- AVX-512指令的前世今生
- unicode编码表 0-255
- 关于Python爬虫爬淘宝mm详细教程+存入数据库