Skip to content

泉州一中信息学Blog

信息学奥赛技术分享博客

  • 登录
  • 小学oj
  • 中学oj
  • 测试页面1
  • Toggle search form

长乐寄训DAY2

Posted on 2023年7月12日2023年7月22日 By 吴, 吴玮航

看到这句奇怪的话了吗?
等我有空写一篇Blog来介绍吧

———————————

前排提示:不要相信cjx的话

另外,挂一个大佬
上午
这是题目
T1 看到对于10%的数据,n=1,直接判断奇偶输出1或2,拿完10分走人

T2 同上,对于10%的数据,W i=1,对于另外20%的数据,n<=2,所以简单粗暴地用max(),min()大法暴力地模拟每一种情况,代码如下(硬水)

#include
using namespace std;
int n,w[10],h[10],v,ans,a[10],b[10];
int main()
{
    freopen("rectangle.in","r",stdin);
    freopen("rectangle.out","w",stdout);
    cin>>n;
    for(int i=1;i>w[i]>>h[i];
        a[i]=w[i];
        b[i]=h[i];
        if(w[i]!=1)
        {
            v=1;
        }
        ans+=h[i];
    }
    if(v==0)
    {
        cout<<ans<<endl;
        return 0;
    }
    else
    {
        ans=2147483647;
    }
    if(n==1)
    {
        cout<<w[1]*h[1]<<endl;
        return 0;
    }
    if(n==2)
    {
        ans=min(ans,(w[1]+w[2])*max(h[1],h[2]));
        ans=min(ans,(w[1]+h[2])*max(w[2],h[1]));
        ans=min(ans,(w[2]+h[1])*max(w[1],h[2]));
        ans=min(ans,(h[1]+h[2])*max(w[1],w[2]));
        cout<<ans<<endl;
        return 0;
    }
    if(n==3)
    {
        for(int i=1;i<=3;i++)
        {
            w[i]=a[i];
            h[i]=b[i];
        }
        w[2]+=w[3];
        h[2]=max(h[2],h[3]);
        ans=min(ans,(w[1]+w[2])*max(h[1],h[2]));
        ans=min(ans,(w[1]+h[2])*max(w[2],h[1]));
        ans=min(ans,(w[2]+h[1])*max(w[1],h[2]));
        ans=min(ans,(h[1]+h[2])*max(w[1],w[2]));
        for(int i=1;i<=3;i++)
        {
            w[i]=a[i];
            h[i]=b[i];
        }
        w[2]+=h[3];
        h[2]=max(h[2],w[3]);
        ans=min(ans,(w[1]+w[2])*max(h[1],h[2]));
        ans=min(ans,(w[1]+h[2])*max(w[2],h[1]));
        ans=min(ans,(w[2]+h[1])*max(w[1],h[2]));
        ans=min(ans,(h[1]+h[2])*max(w[1],w[2]));
        for(int i=1;i<=3;i++)
        {
            w[i]=a[i];
            h[i]=b[i];
        }
        w[1]+=w[3];
        h[1]=max(h[1],h[3]);
        ans=min(ans,(w[1]+w[2])*max(h[1],h[2]));
        ans=min(ans,(w[1]+h[2])*max(w[2],h[1]));
        ans=min(ans,(w[2]+h[1])*max(w[1],h[2]));
        ans=min(ans,(h[1]+h[2])*max(w[1],w[2]));
        for(int i=1;i<=3;i++)
        {
            w[i]=a[i];
            h[i]=b[i];
        }
        w[1]+=h[3];
        h[1]=max(h[1],w[3]);
        ans=min(ans,(w[1]+w[2])*max(h[1],h[2]));
        ans=min(ans,(w[1]+h[2])*max(w[2],h[1]));
        ans=min(ans,(w[2]+h[1])*max(w[1],h[2]));
        ans=min(ans,(h[1]+h[2])*max(w[1],w[2]));
        cout<<ans<=4)
    {
        cout<<"?"<<endl;
    }
}

T3 依然是暴力地收拾掉30%的数据,直接循环+数字拆分,没什么好说的,代码也就不贴了

下午
T1 看到标红的这行没,比赛时少打了这一行,原来70分的代码直接爆零了

啊没错,就是bfs的时候忘记了标记走过的路径,然后要么TLE要么MLE(这玩意是怎么过的样例的啊)简单来说下这题吧。这是题目链接。首先这题要用到二分,不然还是会TLE。首先对每个H进行一遍BFS,求出每个单位时间的障碍的位置分布,但为了不超时将这些BFS合并成一遍,用数字表示在某个单位时间出现的障碍(详见代码就是懒),然后在二分里面进行路径的BFS,并在BFS中根据单位时间来判断障碍,大概就是这样

代码如下

#include 
using namespace std;
int n, k, a[805][805], m[2], d[2], v[805][805], sum, anstrue;
int x, y, e, t[4][2] = { 1, 0, 0, 1, -1, 0, 0, -1 };
string ss;
int l, r, mi, efp, su;
bool p[805][805];
queue A;
queue B;
queue E;
queue S;
int main()
{
    freopen("mecho.in", "r", stdin);
    freopen("mecho.out", "w", stdout);
    cin >> n >> k;
    for (int i = 1; i > ss;
        for (int j = 1; j <= n; j++)
        {
            if (ss[j - 1] == &#039;T&#039;)
            {
                a[i][j] = 1;
            }
            if (ss[j - 1] == &#039;H&#039;)
            {
                a[i][j] = 2;
            }
            if (ss[j - 1] == &#039;M&#039;)
            {
                a[i][j] = 3;
                m[0] = i;
                m[1] = j;
            }
            if (ss[j - 1] == &#039;D&#039;)
            {
                a[i][j] = 4;
                d[0] = i;
                d[1] = j;
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            v[i][j] = 2147483647;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (a[i][j] == 2)
            {
                A.push(i);
                B.push(j);
                E.push(1);
                v[i][j] = 0;
            }
        }
    }
    while (!A.empty())
    {
        x = B.front();
        y = A.front();
        e = E.front();
        A.pop();
        B.pop();
        E.pop();
        for (int k = 0; k  e && y + t[k][0] > 0 &&
                    y + t[k][0]  0 && x + t[k][1] <= n)
            {
                //                          cout<<e<<" "<<x<<" "<<y<<endl;
                v[y + t[k][0]][x + t[k][1]] = e;
                A.push(y + t[k][0]);
                B.push(x + t[k][1]);
                E.push(e + 1);
            }
        }
        //                  cout<<"Dd"<<endl;
    }

<pre><code>/*  cout<<endl;
        for(int i=1;i<=n;i++)
        {
                for(int j=1;j<=n;j++)
                {
                        if(a[i][j]==1)
                        {
                                cout<<"T";
                        }
                        else
                        {
                                if(v[i][j]==2147483647)
                                {
                                        cout<<"O";
                                }
                                else
                                  cout<<v[i][j];
                        }
                }
                cout<<endl;
        }*/

for (int i = 1; i <= n; i++)
{
    for (int j = 1; j <= n; j++)
    {
        if (v[i][j] != 2147483647)
        {
            r = max(r, v[i][j]);
        }
    }
}
//  cout<<r< l + 1)
{
    //      cout<<l<<" "<<r<<endl;
    mi = (l + r) / 2;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            p[i][j] = 0;
        }
    }
    A.push(m[0]);
    B.push(m[1]);
    p[m[0]][m[1]] = 1;
    E.push(0);
    sum = -1;
    sum += mi;
    S.push(sum);
    efp = 0;
    while (!A.empty())
    {
        //          cout<<" xy  "<<x<<" "<<y<<endl;
        x = B.front();
        y = A.front();
        e = E.front();
        su = S.front();
        A.pop();
        B.pop();
        E.pop();
        S.pop();
        if (e % k == 0)
        {
            su++;
        }
        for (int i = 1; i  su || v[y + t[i][0]][x + t[i][1]] == 2147483647) &&
                    a[y + t[i][0]][x + t[i][1]] == 0 && y + t[i][0] > 0 && y + t[i][0]  0 && x + t[i][1] <= n)
            {
                //                  cout<<x<<" "<<y<<"   sum= "<<su<<endl;
                p[y + t[i][0]][x + t[i][1]] = 1;
                A.push(y + t[i][0]);
                B.push(x + t[i][1]);
                E.push(e + 1);
                S.push(su);
            }
            if (y + t[i][0] == d[0] && x + t[i][1] == d[1])
            {
                efp = 1;
                //                  cout<<mi<<" OK"<<endl;
                while (!A.empty())
                {
                    A.pop();
                    B.pop();
                    E.pop();
                    S.pop();
                }
            }
        }
    }
    if (efp == 1)
    {
        l = mi;
        anstrue = 1;
    }
    else
    {
        r = mi;
    }
    //      cout<<"test   "<<l<<" "<<r<<" "<<mi<<endl;
}
if (anstrue == 1)
    cout << l << endl;
else
    cout << "-1" << endl;
</code></pre>

}

训练日志

文章导航

Previous Post: 上一篇文章
Next Post: 长了集训Day3
2025年 6月
一 二 三 四 五 六 日
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« 2月    

2024常州 Class Classic OI Problems Contest cqr的长乐集训2023 CZYZ LOC New Game NOI NOIP Password Protected PM_PK Preview Problems Retrospect Selfmade Qusetion STL The end Training Uneasy Problem 蒟蒻 通报

  • 训练日志
  • 链表
  • 入门
  • 模拟
  • dfs序
  • 并查集
  • spfa
  • 最小割
  • 矩阵树定理
  • 仙人掌
  • BSGS
  • 凸包
  • 回文自动机
  • 递推与动归
  • 堆
  • 莫队算法
  • ST表
  • Treap
  • 树套树
  • 可持久化线段树
  • 初赛
  • 搜索
  • 贪心
  • 深度优先搜索
  • 欧拉图
  • dijkstra
  • 费用流
  • 哈夫曼树
  • kruskual
  • 置换
  • 旋转卡壳
  • KMP
  • 区间动归
  • STL
  • 链表
  • 可并堆
  • sply
  • 主席树
  • 可持久化字典树
  • 算法
  • 动态规划
  • 构造
  • 广度优先搜索
  • 最短路
  • floyd
  • 最大流
  • 虚树
  • prim
  • 筛法
  • 半平面交
  • 字典树
  • 背包动归
  • 基础数据结构
  • 分块
  • 线段树
  • 替罪羊树
  • K-DTree
  • 图论
  • 二分法
  • 迭代搜索
  • 拓扑排序
  • 有上下界网络流
  • 生成树
  • 快速幂
  • 后缀数组
  • 树形动归
  • 哈希表
  • 中级数据结构
  • 平衡树
  • 可持久化数据结构
  • 数据结构
  • 三分法
  • 启发式搜索
  • 图的连通
  • 点分治
  • 博弈论
  • AC自动机
  • 状压动归
  • 单调栈
  • 树状数组
  • 高级数据结构
  • OI资料
  • 数学
  • 高精度
  • 差分约束
  • 树上倍增
  • 素数测试
  • 后缀自动机
  • 数位动归
  • 单调队列
  • 新闻
  • 几何
  • 随机化
  • 二分图染色
  • 树链剖分
  • 欧拉函数
  • manacher
  • 斜率优化
  • 离线处理
  • 信息学奥赛学长风采
  • 字符串
  • 二分图匹配
  • prufer编码
  • 卡特兰数
  • 密码学
  • 决策单调
  • 赛后总结
  • 其他
  • 2-SAT
  • 最近公共祖先
  • 矩阵乘法
  • 记忆化搜索
  • 网络流
  • Link cut tree
  • 排列组合
  • 树
  • 高斯消元
  • 乘法逆元
  • 容斥原理
  • 调和级数
  • 概率与期望
  • 模线性方程组
  • 莫比乌斯反演
  • 快速傅里叶变换
  • 扩展欧几里德
  • 最大公约数与最小公倍数

近期文章

  • DP杂题
  • 2025年2月13日模拟赛
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 3
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 2
  • HLOJ-TEST ROUND 4-T1/T2(构造)- 1

近期评论

归档

  • 2025年2月
  • 2025年1月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月

Copyright © 2025 泉州一中信息学Blog.

Powered by PressBook WordPress theme