zoukankan      html  css  js  c++  java
  • 周末DHU友谊赛(半日游)感想

    DHU的校园挺好的啊,感觉教学楼啊,整体环境啊比咱学校好上一些,和大家一起出来有些春(冬)游的意味,食堂也是十分的宽敞,座位好多!

    吐槽shu的食堂座位到饭点明显太少,食堂品类好多,shu的吃多了感觉没啥新奇的了呢。

    然后友谊赛正题。昨天被徐州复现虐了,又打了广工的新生赛,打的还行叭,虽然没ak,真的挺想ak一次的(555估计没这机会了),所以今天的友谊赛也有报一些期待。

    最后只有4题滚粗。

    我还是没自己想象中的强啊。

    前期70多分钟,我交题一直没反馈,我以为大家都这样?也看不了榜(怎么可能交题不给反馈,我真的sb)然后就一直做下去,

    做到第四题,看到了别人能看榜,我就tm立刻叫志愿者了,才知道我机子的域名不对,.120搞到.119去了,然后才开始交题,还是挺sb的吧我,下次比赛碰到异常情况一定要第一时间举手找帮助。

    然后我看到第四题,榜1也才第四题,其实我做前面的题速度还不错的,然后就在77~80分钟将这三道题全交了,都是1A,还挺舒服。当然后来发现第二题没读题面,直接写dfs有点亏~

    然后就随便模拟匹配了个D题,没自己测好,WA了3发,应该先自己找特殊情况测的,WA可以省,不要让judge给你罚时啊~

    然后E就没了,我等等去补,dfs?拓扑?

    然后后面2个小时差不多读了剩下的题,然后一直在 想F,冲F(5发呀)

    F就两个矩阵相乘,删去第一个矩阵的一行和第二个矩阵的一列使得答案最小,矩阵分别是n*m,和m*k的,都<=1000,

    显然如果暴力矩阵乘法,nmk的复杂度承受不起,但题目里的矩阵考究的是以给非0元素的方式输入的,分别为p,q个,且数量都少于1000,少见必妖!所以以此为突破口;

    我们记录第一个矩阵里的非0元素,输入第二个矩阵里的非0元素时,对p个第一矩阵中的元素遍历去生成我们的结果矩阵,复杂度可以降到p*q;细节见我的代码;

    然后统计结果矩阵每行,每列的值,最后取  min(总的值-行-列+行列)   简单的容斥?反正就是把减了两遍的加上去即可。

    (虽然这一步找最小值我想了好多假算法,比如删完行列的最大值,在统计列行的最大值,取更小,太假了,不具备一般情形。最后想到上面这个容斥,结论就显然正确了)

    然后我的最终思路完全正确,但最后由于样例给的n=m=k,没测出来,我傻了,最后对sum[i][j] ,结果矩阵应该是n*k的,我用的都是 n和m ,md应该用n和k,真的sb,导致没冲过这题。我的青春结束了(滑稽)

    细节上的处理呀,得自己造数据debug啊。

    然后继续加油吧。贴个F代码。

     1 #include <bits/stdc++.h>
     2 #define debug(x) cout << #x << ": " << x << endl
     3 using namespace std;
     4 typedef long long ll;
     5 const int maxn=1e3+7;
     6 const int INF=0x3f3f3f3f;
     7 const int MOD=1e9+7;
     8 
     9 ll sum[maxn][maxn];
    10 ll sumr[maxn],sumc[maxn];
    11 
    12 struct node
    13 {
    14     ll x,y,v;
    15 }pp[maxn];
    16 
    17 int main()
    18 {
    19     ios::sync_with_stdio(false);
    20     cin.tie(0);
    21     ll n,m,k;
    22     while(cin>>n>>m>>k)
    23     {
    24         memset(sum,0,sizeof(sum));
    25         ll p,q,x,y,v;
    26         cin>>p>>q;
    27         for(ll i=0;i<p;++i)
    28         {
    29             cin>>pp[i].x>>pp[i].y>>pp[i].v;
    30         }
    31         while(q--)
    32         {
    33             cin>>x>>y>>v;
    34             for(ll i=0;i<p;++i)
    35             {
    36                 if(pp[i].y==x)
    37                 {
    38                     sum[pp[i].x][y]+=pp[i].v*v;
    39                 }
    40             }
    41         }
    42         ll ans=0;
    43         for(ll i=1;i<=n;++i)
    44         {
    45             sumr[i]=0;
    46             for(ll j=1;j<=k;++j)
    47             {
    48                 sumr[i]+=sum[i][j];
    49                 //debug(sum[i][j]);
    50                 ans+=sum[i][j];
    51             }
    52             cout<<endl;
    53         }
    54         for(ll j=1;j<=k;++j)
    55         {
    56             sumc[j]=0;
    57             for(ll i=1;i<=n;++i)
    58             {
    59                 sumc[j]+=sum[i][j];
    60             }
    61         }
    62         ll res=ans;
    63         for(ll i=1;i<=n;++i)
    64         {
    65             for(ll j=1;j<=k;++j)
    66             {
    67                 res=min(res,ans-sumr[i]-sumc[j]+sum[i][j]);
    68             }
    69         }
    70         cout<<res<<endl;
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    文件上传的核心点 一(59)
    ajax1—php(27)
    php—Smarty-缓存2(26)
    php—Smarty-缓存1(25)
    java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)
    Linux—virtualbox系统安装(1)
    php—Smarty-2
    java—不同的用户登录以后可以看到不同的菜单(后台可以实现对用户菜单的管理) 1 (55)
    java—数据存储过程 (54)
    java—ThreadLocal模式与OSIV模式(53)
  • 原文地址:https://www.cnblogs.com/Zzqf/p/12007109.html
Copyright © 2011-2022 走看看