Skip to content

泉州一中信息学Blog

信息学奥赛技术分享博客

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

重庆集训DAY10

Posted on 2023年10月10日 By 吴, 吴玮航 重庆集训DAY10无评论

看到别人电脑疯狂死机,把还原系统关掉从而电脑从不死机的我很有优越感
最近考的都是什么东西啊,四题三题是超出noip的算法。炸得一塌糊涂(stO cqr and cjx Orz)
T1 签。暴力算法是直接跑O(nmk)对每个输入老老实实地在矩阵里进行一遍,然后边算边取模,非常好实现也不容易出错。但是注意到题目中k非常小,只有1000,所以可以预处理每行和每列的总和,然后在这k次操作中直接调用,行与列之间重复的计算再单独加上(或减去)一遍。这样基本就能在时限内拿下。但是代码实现比较容易出错,细节也比较多,祥见代码。我赛时把暴力和正解都打了,然后正解炸了只有50分。赛后发现:不开longlong见祖宗。总之我把代码贴这里了(约200行,相当炸裂)

#include
using namespace std;
int x,y,n,m,k;
//vectorh[1000005],l[1000005];
long long int h[1000005],l[1000005];
long long int sh[1000005],sl[1000005],ans,sb[1005][1005];
vectorfh;
vectorfl;
char a;
int sol(int hh,int ll)
{
    return ((hh-1)*m+ll)%1000000007;
}
int main()
{
    freopen("wisdom.in","r",stdin);
    freopen("wisdom.out","w",stdout);
    cin>>n>>m>>k;
    if(n<=1000&&m<=1000)
    {
//      cout<<"A"<<endl;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                sb[i][j]=sol(i,j);
            }
        }
//      for(int i=1;i<=n;i++)
//      {
//          for(int j=1;j<=m;j++)
//          {
//              cout<<sb[i][j]<<"    ";
//          }
//          cout<<endl;
//      }
        for(int i=1;i>a>>x>>y;
            if(a=='R')
            {
                for(int j=1;j<=m;j++)
                {
                    sb[x][j]*=y;
                    sb[x][j]%=1000000007;
                }
            }
            else
            {
                for(int j=1;j<=n;j++)
                {
                    sb[j][x]*=y;
                    sb[j][x]%=1000000007;
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
//              cout<<sb[i][j]<<"   ";
                ans+=sb[i][j];
                ans%=1000000007;
            }
//          cout<<endl;
        }
        cout<<ans<<endl;
    }
    else
    {
        for(int i=1;i<=1000000;i++)
        {
            h[i]=-1;
            l[i]=-1;
        }
        for(int i=1;i>a>>x>>y;
            if(a=='R')
            {
//              h[x].push_back(y);
                if(h[x]==-1)
                {
                    h[x]=y;
                    fh.push_back(x);
//                  cout<<"+++++++++++++   "<<x<<endl;
                }
                else
                {
                    h[x]*=y;
                    h[x]%=1000000007;
                }           
            }
            else
            {
//              l[x].push_back(y);
                if(l[x]==-1)
                {
                    l[x]=y;
                    fl.push_back(x);
                }
                else
                {
                    l[x]*=y;
                    l[x]%=1000000007;
                }

            }
        }
        for(int i=1;i<=n;i++)
        {
            sh[i]=(((i-1)*m+1+i*m)*m/2)%1000000007;
        }
        for(int i=1;i<=n;i++)
        {
            sl[1]+=(i-1)*m+1;
        }
        sl[1]%=1000000007;
        for(int i=2;i<=m;i++)
        {
            sl[i]=sl[1]+n*(i-1);
            sl[i]%=1000000007;
        }
        for(int i=1;i<=n;i++)
        {
            ans+=sh[i];
            ans%=1000000007;
        }
//      cout<<"--  "<<ans<<endl;
//      for(int i=1;i<=n;i++)
//      {
//          cout<<sh[i]<<" ";
//      }
//      cout<<endl;
//      for(int i=1;i<=m;i++)
//      {
//          cout<<sl[i]<<" ";
//      }
//      cout<<endl;
        for(int i:fh)
        {
//          cout<<"--+    "<<i<<endl;   

            ans+=sh[i]*(h[i]-1);
            ans%=1000000007;    

//          cout<<"====  "<<ans<<"  "<<i<<"  "<<h[i]<<endl;

        }
//      cout<<"  1    -----  "<<ans<<endl;
        for(int i:fl)
        {

            ans+=sl[i]*(l[i]-1);
//          pl[i]++;
            ans%=1000000007;

        }
//      for(int i=0;i<=1000000;i++)
//      {
//          pl[i]=0;
//          ph[i]=0;
//      }
//      cout<<"__DWDWD"<<endl;
//      cout<<h[2][0]<<endl;
        for(int i:fh)
        {
            for(int j:fl)
            {
//              cout<<i<<"   "<<j<<"  "<<ph[i]<<" "<<pl[j]<<" "<<h[i][ph[i]]<<" "<<l[j][pl[j]]<<endl;
//              if(vla[j]==0&&vha[i]==0)
                {
                    ans+=(((h[i]-1)*(l[j]-1)%1000000007)*sol(i,j))%1000000007;
                    ans%=1000000007;
//                  pl[j]++;
//                  ph[i]++;
                }           
            }
//          for(int i=1;i<=1000;i++)
//          {
//              pl[i]=0;
//          }
        }
        cout<<ans<<endl;
}

}

T2 赛时想出dp做法。根据每次电梯到达的楼层作为子问题处理,推出dp[i]=min(dp[i],dp[j]+(n-sum[j])(i-1)2).但是在处理k时出了问题,最后因为多测炸了(我可是过了两个大样例啊!!)正解是李超线段树(那边的教练想出的优先队列做法还假了),不懂,不讲,详见cjx或cqr的blog

T3 赛时脑抽没打暴力,赛后直接dfs能拿到可观的分数。观察数据发现n非常小以至于可以用dfs。然后暴力处理m。正解是FWT,不懂,不讲

T4 T4死了

训练日志

文章导航

Previous Post: DAY?+1
Next Post: 抽签【11!】次

发表回复 取消回复

要发表评论,您必须先登录。

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