首页 > 其他分享 >暑假集训csp提高模拟13

暑假集训csp提高模拟13

时间:2024-08-01 19:51:45浏览次数:12  
标签:11 13 ch int siz 集训 using son csp

赛时 rank 28,T1 44,T2 0,T3 30,T4 5

啊哈哈哈哈哈,我要挂没啦,啊哈哈哈哈哈哈哈哈哈

最后10min的心路历程

  1. 感觉应该又要挂分了 (11:20)
  2. 感觉一分没有 (11:23)
  3. 要被薄纱了 (11:25)
  4. 感觉人均AK,就我不会(11:25)
  5. 啊哈哈哈哈哈,我太菜了,我要AF0了(11:27)
  6. 啊哈哈哈,看了一眼自己代码,我咋只会打暴力啊,啊哈哈哈(11:28)
  7. 啊哈哈哈,要死了,啊啊(11:29)

这几天做的梦是越来越逆天了。没准哪天就写一个记梦之作?

T1 小孩召开法 1

记搜状压

赛时胡了一个错的结论

签到失败

[ABC278F] Shiritori

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
using ll=long long;using ull=unsigned long long;
using db = double;using ldb = long double;
const int N = 17;
int n;string s[N];
bool vis[N][1<<N],ans[N][1<<N];
bool dfs(int last,int state){
    if(vis[last][state]) return ans[last][state];
    for(int i = 1;i <= n; ++i){
        if((state&(1<<(i-1)))) continue;
        if(last == 0 || s[last].back() == s[i].front()){
            if(!dfs(i,state|(1<<(i-1)))){
                vis[last][state] = true;
                return ans[last][state] = true;
            }  
        }
    }
    vis[last][state] = true;
    return ans[last][state] = false;
}
inline void solve(){
    cin>>n;
    for(int i = 1;i <= n; ++i) cin>>s[i];
    if(dfs(0,0)) cout<<"First";
    else cout<<"Second";
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    solve();
}

T2 小孩召开法 2

神仙交互题。

\(O(n^2)\)的非常简单,考虑如何优化这个东西。

先求出以1为根的所有点的深度。

从小到大枚举深度,当枚举到第i层时,那么说明\(1\sim i-1\)层已经处理好了。

那么将这个已经处理好的树剖开,枚举第i层中的点\(x\),求与点\(y\)(初始时钦定为1)的lca。

跳到lca所在重链的底部,求出\(x\)与\(y\)的距离。

如果距离不为0,那么就从这里跳到距离级父亲。

如果正好为第i-1层,那么这个就是x的父亲,反之,那么说明重链肯定没有x的父亲,走到轻链。

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
const int N = 3010;
int ans[N],n;
vector<int> a[N];
int ch[N][2],siz[N],son[N],dist[N],fa[N];
void dfs(int x){
    if(!x) return;
    dfs(ch[x][0]);dfs(ch[x][1]);
    siz[x] = 1 + siz[ch[x][0]] + siz[ch[x][1]];
    if(siz[ch[x][0]] > siz[ch[x][1]]) son[x] = son[ch[x][0]];
    else son[x] = son[ch[x][1]];
    if(siz[x] == 1) son[x] = x;
}
inline void solve(){
    cin>>n;int mx = 0;
    auto Query = [](int x,int y) -> int{
        cout<<"? 1 "<<x<<' '<<y<<endl;
        int dis;cin>>dis;
        return dis;
    };
    for(int i = 2,dis;i <= n; ++i){
        dis = Query(1,i);
        dist[i] = dis;
        mx = max(dis,mx);
        a[dis].push_back(i);
    }
    for(int i = 1;i <= mx; ++i){
        dfs(1);
        for(int x : a[i]){
            int y = 1;
            while(dist[y] != i-1){
                int z = son[y],dis = dist[z] - (dist[z] + dist[x] - Query(z,x))/2;
                while(dis--) z = fa[z];
                if(dist[z] == i - 1){ y = z;break;}
                if(siz[ch[z][0]] > siz[ch[z][1]]) y = ch[z][1];
                else y = ch[z][0];
            }
            fa[x] = y;
            if(!ch[y][0]) ch[y][0] = x;
            else ch[y][1] = x;
        }
    }
    cout<<"! ";
    for(int i = 2;i <= n; ++i) cout<<fa[i]<<' ';
    cout<<endl;
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    solve();
}

T3 小孩召开法 3

猫树分治的trick

先去学猫树了

T4 小孩召开法 4

放AK题,离谱中的离谱

标签:11,13,ch,int,siz,集训,using,son,csp
From: https://www.cnblogs.com/hzoi-Cu/p/18337353

相关文章

  • Luogu P1613 跑路 题解 [ 蓝 ] [ 倍增 ] [ Floyd 最短路 ] [ 状压 dp ]
    跑路:绝佳倍增好题,思路是化\(2^k\)为\(1\),倍增起预处理作用。最近不知道是撞了什么运,前一脚看的是绿题,写完之后交一发,发现直接被lxl升蓝了,血赚。思路:Floyd首先观察到每次走\(2^k\)的代价为\(1\),我们可以预处理出每次走\(2^i\)能到哪些点。但为了让这题的代码更好实......
  • CodeForces 1132B Discounts
    题目链接:CodeForces1132B【Discounts】思路    因为使用coupons购买q[i]块巧克力,不需要付最便宜的那块巧克力的钱,所以为了使得优惠最大化,所以可以在使用优惠券的时候购买最贵的p[i]块巧克力,所以计算所有巧克力价格高之和和排序后很快能得到答案。代码#include<cst......
  • [赛记] 暑假集训CSP提高模拟 #N/A 总结
    没写的有些多,所以一块写EVA原题:忘了;贪心;赛时将每条鱼放在了右端点,导致分的情况太多,最后没打完;贪心的想一下,将每条鱼放在网的左或右端点肯定不会更劣;将每条鱼作为网的左端点,然后利用相对运动的知识统计出剩下$n-1$条鱼的进入和出去网的范围的时间(可以将出去的时间稍......
  • 代码随想录day16 || 513 树左下角值,112 路径之和,116 中序后序遍历构造二叉树
    切片传递问题question:什么情况下传递切片,什么情况下传递切片指针,为什么有时候会修改原始副本,有时候又不会呢?typesli[]intfuncmain(){ slice:=[]int{1} fmt.Printf("slice:%p\n",slice) change1(slice) fmt.Println("=================================") s2:=......
  • CSP-J2019公交换乘
    马上CSP2024了,做题ing...(题目描述戳它思路1.用结构体双端队列存票,用双端队列的原因是后面要遍历2.结构体元素:price+time+used3.过期的票要及时pop4.不要一边遍历一边pop,用used标记代码#include<bits/stdc++.h>usingnamespacestd;structTicket{intprice......
  • SSCI新质生产力测算数据集(2013-2022年)
    数据来源:参考发表于InternationalReviewofEconomicsandFinance上的文章,基于He和Liu(2024)的做法,构建了一个衡量新质生产力的指标体系,通过熵值法对各个指标进行计算得到各省份新质生产力水平数据。时间跨度:2013-2022年数据范围:省级层面包含指标:样例数据:测算代码:包......
  • CVE-2023-1313
    开启靶场url访问/install来运行安装http://eci-2ze0wqx38em0qticuhug.cloudeci1.ichunqiu.com/install/得知其用户和密码为admin登录查找文件上传位置上传一句话木马文件<?phpechophpinfo();@eval($_POST['flw']);?>下载查看上传木马路径复制路径/storag......
  • 中山集训 day 1 day 3 模拟赛补题
    Round1A模拟即可。赛场上的写法我自认为写的挺好的。把所有的in替换成outans可以得到的所有串预处理出来,然后和其他原来的串判一下相等即可。Round1B很容易写错的题目。需要意识到\(dp_{\{\}}=x\),如果\(x\)的值更小的话,可以考虑将本来设为dp状态的四元组中的某......
  • 2024暑假集训测试16
    前言比赛链接。真是一次比一次唐了。被莫反害惨了属于是(其实完全是自己唐吧),T1狂推莫反不止,一直想着怎么处理\(999\)的限制,最后推出来了复杂度是\(999\sqrtn\)的,过不去,继续唐我的高级分块套分块做法,比赛快结束了才发现正因为那个限制所以我直接枚举就行了,丫的最后少了......
  • 暑假集训CSP提高模拟12
    T1这题千万不要认为是莫反题枚举质因子\(x,y\),\(x,y<=998\),对答案的贡献为\(min(\lfloor{\frac{B}{x}}\rfloor,\lfloor{\frac{D}{y}}\rfloor)\),再容斥一下即可MD最后答案要取模啊点击查看代码#include<bits/stdc++.h>#definespeed()ios::sync_with_stdio(false),cin.t......