【NOIP 模拟赛】钟 模拟+链表
生活随笔
收集整理的這篇文章主要介紹了
【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; }?
轉載于:https://www.cnblogs.com/TSHugh/p/7354400.html
總結
以上是生活随笔為你收集整理的【NOIP 模拟赛】钟 模拟+链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置学习Go的编辑器:配置TextMat
- 下一篇: Java进阶之路