zoukankan      html  css  js  c++  java
  • HDU 4849

    Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)

     
    Input
    There are several test cases. Please process till EOF.
    For each test case, there is only one line containing 6 integers N,M,X0,X1,Y0,Y1.See the description for more details.
     
    Output
    For each test case, output a single line containing a single integer: the number of minimal category.
     
    Sample Input
    3 10 1 2 3 4
    4 20 2 3 4 5
     
    Sample Output
    1
    10
     
     
    Hint:

    怎么说吧,就是一个又臭又长又水的单源最短路径外加算算MOD的题。

     1 #include<cstdio>
     2 #include<queue>
     3 #include<cstring>
     4 #define MAXN 1003
     5 #define MAXK 1000*1000+1000
     6 #define INF 0x3f3f3f3f
     7 using namespace std;
     8 typedef long long ll;
     9 int n,m;
    10 ll x[MAXK],y[MAXK],z[MAXK],c[MAXN][MAXN];
    11 int cate[1000000+3];
    12 void calc()
    13 {
    14     int max_k=(n-1)*n+(n-2);
    15     for(int k=0;k<=max_k;k++)
    16     {
    17         if(k>=2)
    18         {
    19             x[k]=(12345 + (x[k-1] * 23456) % 5837501 + (x[k-2] * 34567) % 5837501 + (x[k-1] * x[k-2] * 45678) % 5837501 ) % 5837501;
    20             y[k]=(56789 + (y[k-1] * 67890) % 9860381 + (y[k-2] * 78901) % 9860381 + (y[k-1] * y[k-2] * 89012) % 9860381 ) % 9860381;
    21         }
    22         z[k]=(x[k] * 90123 + y[k] ) % 8475871 + 1;
    23     }
    24     //for(int k=0;k<=max_k;k++) printf("x[%d]=%lld 	 y[%d]=%lld 	 z[%d]=%lld 
    ",k,x[k],k,y[k],k,z[k]);
    25     for(int i=0;i<n;i++)
    26     {
    27         for(int j=0;j<n;j++)
    28         {
    29             if(i==j) c[i][j]=0;
    30             else c[i][j]=z[(i*n+j)];
    31             //printf("%lld	",c[i][j]);
    32         }
    33         //printf("
    ");
    34     }
    35 }
    36 bool vis[MAXN];
    37 ll d[MAXN];
    38 void spfa()
    39 {
    40     for(int i=1;i<n;i++){
    41         vis[i]=0;
    42         d[i]=INF;
    43     }
    44     vis[0]=1;
    45     d[0]=0;
    46     queue<int> q;
    47     q.push(0);
    48     while(!q.empty())
    49     {
    50         int u=q.front();q.pop();vis[u]=0;
    51         for(int v=0;v<n;v++)
    52         {
    53             if(u==v) continue;
    54             ll tmp=d[v];
    55             if(d[v]>d[u]+c[u][v]) d[v]=d[u]+c[u][v];
    56             if(d[v]<tmp && !vis[v]) q.push(v),vis[v]=1;
    57         }
    58     }
    59 }
    60 int main()
    61 {
    62     while(scanf("%d %d %lld %lld %lld %lld",&n,&m,&x[0],&x[1],&y[0],&y[1])!=EOF)
    63     {
    64         calc();
    65         spfa();
    66         memset(cate,0,sizeof(cate));
    67         for(int i=1;i<n;i++)
    68         {
    69             //printf("d[%d]=%lld
    ",i,d[i]);
    70             cate[(d[i]%m)]++;
    71         }
    72         for(int i=0;i<m;i++)
    73         {
    74             if(cate[i]!=0)
    75             {
    76                 printf("%d
    ",i);
    77                 break;
    78             }
    79         }
    80     }
    81 }
  • 相关阅读:
    SqlServer存储过程函数加解密[极有用]
    BMDThread控件动态创建多线程示例
    cxGrid右键自定义菜单
    越狱中Michael的一种疾病
    静态链表
    单行编辑框SelectText()
    开机得按F1
    jquery调用页面后台方法‏
    .net调用存储过程详解
    javascript兼容各种浏览器的异步请求
  • 原文地址:https://www.cnblogs.com/dilthey/p/6815341.html
Copyright © 2011-2022 走看看