zoukankan      html  css  js  c++  java
  • 【NOIP 模拟赛】钟 模拟+链表

    biubiu~~

    这道题实际上就是优化模拟,就是找到最先死的让他死掉,运用时间上的加速,题解上说,要用堆优化,也就是这个意思。

    对于链表,单项链表和循环链表都不常用,最常用的是双向链表,删除和插入比较方便。

    所谓挂链就是把链表中的值域换成一坨别的东东西......

    #include <cstdio>
    inline void read(int &sum){
      register char ch=getchar();bool symbol=0;
      for(sum=0;ch<'0'||ch>'9';ch=getchar())if(ch=='-')symbol=1;
      for(;ch>='0'&&ch<='9';sum=(sum<<1)+(sum<<3)+ch-'0',ch=getchar());
      if(symbol)sum=-sum;
    }
    const int C=110;
    const int N=1000100;
    int fight[C][C],get[C][C][C];
    int n,c;
    int a[N],qian[N],hou[N],val[N],Num,size[C];
    int main(){
      read(c),read(n);
      Num=c;
      for(int i=1;i<=c;i++)
        for(int j=1;j<=c;j++)
          read(fight[i][j]);
      for(int i=1;i<=n;i++)
        read(a[i]),size[a[i]]++;
      qian[1]=0,hou[0]=1;
      for(int i=1;i<=n;i++)
        qian[i+1]=i,hou[i]=i+1,val[i]=1;
      for(int k=0;k<=c;k++)
        for(int i=0;i<=c;i++)
          for(int j=0;j<=c;j++)
            get[k][i][j]=fight[k][i]+fight[k][j];
      while(Num!=1){
        for(int i=hou[0];i<=n;i=hou[i])
          val[i]+=get[a[i]][a[qian[i]]][a[hou[i]]];
        for(int i=hou[0];i<=n;i=hou[i])
          if(val[i]<=0){
            size[a[i]]--;
            if(!size[a[i]])Num--;
            qian[hou[i]]=qian[i];
            hou[qian[i]]=hou[i];
          }
      }
      printf("%d",a[hou[0]]);
      return 0;
    }
  • 相关阅读:
    博弈论专题(持续更新)
    数论专题(持续更新)
    树的遍历专题(持续更新)
    直线折线分割平面问题
    字典树模板 HDU1251
    差分数组——面对大数据的处理
    最短路——dijkstra算法
    并查集与最小生成树
    KMP的初步认识及题目分析
    Codeforces Round#636(Div.3) D题 差分数组
  • 原文地址:https://www.cnblogs.com/TSHugh/p/7354400.html
Copyright © 2011-2022 走看看