zoukankan      html  css  js  c++  java
  • GDOI 2021 普及组溺水记

    Day 1

    T1

    一看样例:答案不就是 \(\dfrac{\max_{i=1}^n a_i +1}{2}\) 吗?

    于是自信打上,拍都不拍。然后就,,对了?

    插曲:自己出了一个极端数据,发现 scanf 跑了 \(1.05s\) ,急忙打了一个快读

    T2

    开始打了一个暴力,就连样例都 T 飞

    后来想好像一直向前是最优的,于是打了一个这

    然而我没有全排列,炸了。

    正解:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=43200;
    int T,sx,sy,sz,ex,ey,ez,ans;
    inline int A(int x,int y) {
    	return min(abs(x-y),N-abs(x-y));
    }
    inline bool check() {
    	if(A(sx,sy)==A(ex,ey)) {
    		if(A(sy,sz)==A(ey,ez))return 1;
    		if(A(sz,sx)==A(ey,ez))return 1;
    	}
    	if(A(sx,sz)==A(ex,ey)) {
    		if(A(sz,sy)==A(ey,ez))return 1;
    		if(A(sy,sx)==A(ey,ez))return 1;
    	}
    	if(A(sy,sz)==A(ex,ey)) {
    		if(A(sz,sx)==A(ey,ez))return 1;
    		if(A(sx,sy)==A(ey,ez))return 1;
    	}
    	return 0;
    }
    int main() {
    	freopen("rescue.in","r",stdin);
    	freopen("rescue.out","w",stdout);
    	scanf("%d",&T);
    	while(T--) {
    		scanf("%d%d%d%d%d%d",&sx,&sy,&sz,&ex,&ey,&ez);
    		ans=2100000000;
    		for(int i=0;i<N;i++) {
    			if(check()) ans=min(ans,min(i,N-i));
    			sx=(sx+1)%N,sy=(sy+12)%N,sz=(sz+720)%N;
    		}
    		if(ans==2100000000)puts("ERROR");
    		else printf("%d\n",ans);
    	}
    }
    

    T3

    一道神奇的题目,直接贪心找环,然而直接爆零

    总结

    T1:规律题要打对拍,不然风险太大

    T2:考虑要全面

    T3:学会放弃

    出成绩

    膜拜广州二中高手,其实

    如果 BF 来估计能 AK

    总分 \(100+40+0=140\)

    Day 2

    T1

    想到了 KMP ,然后又想到之前的一道题,于是陷入单个数组的查分无法自拔

    赛后:我*,只要移一下项就可以了!!!!!!!!!!!!!!!!!!

    Sol:题意变为 \((x_{i+j-1}+z_j)\mod 256=y_{i+j-1}\) 移项后 \((y_{i+j-1}-x_{i+j-1}+256)\mod 256=z_j\)

    等量代换后是一个 kmp 模板

    #include<bits/stdc++.h>
    using namespace std;
    const int N=200005;
    int n,m,A,B,C,D,E,x[N],y[N],z[N],nxt[N],ans[N],len;
    int main() {
    	freopen("noise.in","r",stdin);
    	freopen("noise.out","w",stdout);
    	scanf("%d%d%d%d%d%d%d",&n,&m,&A,&B,&C,&D,&E);
    	for(int i=1;i<=n;i++)scanf("%d",&y[i]);
    	for(int i=1;i<=m;i++)scanf("%d",&z[i]);
    	x[1]=A;
    	for(int i=2;i<=n;i++)x[i]=((x[i-1]<<B)+(x[i-1]>>C)+D)%E;
    	for(int i=1;i<=n;i++)y[i]=(y[i]-x[i]+256)%256;
    	for(int i=2,j=0;i<=m;i++) {
    		while(j && z[i]^z[j+1])j=nxt[j];
    		if(z[i]==z[j+1])j++;
    		nxt[i]=j;
    	}
    	for(int i=1,j=0;i<=n;i++) {
    		while(j && y[i]^z[j+1])j=nxt[j];
    		if(y[i]==z[j+1])j++;
    		if(j==m)ans[++len]=i-m+1,j=nxt[j];
    	}
    	if(!len)return puts("wrong"),0;
    	printf("%d\n",len);
    	for(int i=1;i<=len;i++)printf("%d ",ans[i]);
    }
    

    T2

    好的,连续三个数异或不为 0:有手就行

    多一个数:*

    推了半个小时式子的我放弃去打了一个 dfs

    T3

    直接一个贪心 \(O(n^3)\) 似乎常数太大导致没有 \(50\)

    或者贪心错误

    总之这个分骗地可以

    总结

    T1:合并同类项

    T2:学会放弃

    T3:加个快读

    出成绩

    巨啊 \(LWT\) 160 ,比 \(SJH\)\(10pts\) 可还行

    一个周末就这么度过了,回去不用写作业的欢乐

    题外话

    DY 宿舍欢乐多

    —— GTJ

    可能 ZS 只有我们带了电脑

    edge://surf

    好家伙一个比小恐龙好玩的玩意儿,比赛时都可以腐

    监考老师看了我一眼然后若有所思的笑了

    耀华实验学校

    床是真的矮,一坐下去可能会撞头。。。然后一天 400

    伙食也一般。可能是深圳市大城市,房价物价都贵

    成群的巨佬

    1 年初中, 1 年高中。 22 岁麻省理工博士的科学家。。。

    国外各大大学的学霸们。。。

    初二报送清华,高一全省第一进省队的。。。

    All At All

    第一次打省赛,炸的惨

    唯一的收获:数位 dp,反悔的贪心,一做就废的推公式技巧,一支笔,一个本子

    没了

    总而言之:体味了负面情感

    这未必是件坏事

    丰富我们的人生阅历

    把负面情感转换为成长助力,可以获得美好情感

    加油吧

  • 相关阅读:
    Linux -- touch
    Linux -- ls
    Linux -- 手动新建用户
    Linux -- id
    Linux -- chfn
    Linux -- finger
    Linux -- newgrp
    浅谈java中线程和操作系统线程
    java虚拟机入门(五)- 常见垃圾回收器及jvm实现
    java虚拟机入门(四)-垃圾回收的故事
  • 原文地址:https://www.cnblogs.com/KonjakLAF/p/14649571.html
Copyright © 2011-2022 走看看