算是填个坑吧 , QwQ

Day 1

第一题很水,就是考代码能力 ,直接贴代码。

 #include <iostream>
 #include <cstdlib>
 #include <cstdio>
  <<  , maxn =  ;
 using namespace std ;
 int n , jv[maxn][maxn] ;
 inline void Init( )
 {
 freopen( "magic.in" , "r" , stdin ) ;
 freopen( "magic.out" , "w" , stdout ) ;
 }

 int read( )
 {
  , ret =  ;
  ; ch = getchar( ) ; }
  + ch - ' , ch = getchar( ) ;
 return ret * k ;
 }

 void sov( )
 {
  , y = (+n)>> ;
 jv[x][y] =  ;
  ; i <= n*n ; ++i )
  {
  && y != n )
  {
 jv[n][y+] = i ;
 x = n ; ++y ;
 continue ;
  }
  )
  {
 jv[x-][] = i ;
 --x ; y =  ;
 continue ;
  }
  && y == n )
  {
 jv[x+][y] = i ;
 ++x ; continue ;
  }
 else
  {
 ][y+] )
  {
 jv[x-][y+] = i ;
 --x ; ++y ;
 continue ;
  }
 jv[x+][y] = i ;
 ++x ; continue ;
  }
  }
 }

 void output( )
 {
  ; x <= n ; ++x )
  {
  ; y <= n ; ++y )
 printf( "%d " , jv[x][y] ) ;
 printf( "\n" ) ;
  }
 }

 int main( )
 {
  Init( ) ;
 n = read( ) ;
  sov( ) ;
  output( ) ;
  fclose( stdin ) ;
  fclose( stdout ) ;
  ;
 }

第二题

就是求一个有向图的最小正环 , 但分析后就知道每个点只有一个出度 ,所以图中只存在简单环 ,

于是我在考场上用并查集做的 。

 #include <iostream>
 #include <cstdlib>
 #include <cstdio>
  <<  , maxn =  +  ;
 using namespace std ;
 ] ; //father and dis

 inline void Init( )
 {
 freopen( "message.in" , "r" , stdin ) ;
 freopen( "message.out" , "w" , stdout ) ;
 }

 int read( )
 {
  , ret =  ;
  ; ch = getchar( ) ; }
  + ch - ' , ch = getchar( ) ;
 return ret * k ;
 }

 int find( int x )
 {
 ] == x ) return x ;
 ] ;
 fa[x][] = find( fa[x][] ) ;
 fa[x][] += fa[fu][] ;
 ] ;
 }

 void sov( )
 {
  ; x <= n ; ++x ) fa[x][] = x ;
 int y , root1 , root2 , ans = inf ;
  ; x <= n ; ++x )
  {
 y = read( ) ;
 root1 = find( x ) , root2 = find( y ) ;
 if( root1 != root2 )
  {
 fa[root1][] = root2 ;
 fa[root1][] +=  + fa[y][] ;
  }
 else
 ans = min( ans , fa[x][] + fa[y][] +  ) ;
  }
 printf( "%d\n" , ans ) ;
 }

 int main( )
 {
  Init( ) ;
 n = read( ) ;
  sov( ) ;
  fclose( stdin ) ;
  fclose( stdout ) ;
  ;
 }

后面是先拓扑去不是环里的点,在找最小的环(对每个点打标记,打个标记的点不用遍历。)

 #include <iostream>
 #include <cstdlib>
 #include <cstdio>
 #include <queue>
  <<  , maxn =  +  ;
 using namespace std ;
 queue < int > Q ;
 struct id
 {
 int nxt , in ; bool vis ;
 } node[maxn] ;
  ;

 inline void Init( )
 {
 freopen( "message.in" , "r" , stdin ) ;
 freopen( "message.out" , "w" , stdout ) ;
 }

 int read( )
 {
  , ret =  ;
  ; ch = getchar( ) ; }
  + ch - ' , ch = getchar( ) ;
 return ret * k ;
 }

 void input( )
 {
 n = read( ) ;
  ; x <= n ; ++x )
 node[x].nxt = read( ) , node[node[x].nxt].in++ ;
 }

 void sov( )
 {
  ; x <= n ; ++x ) if( !node[x].in ) { Q.push( x ) ; node[x].vis = true ; }
 while( !Q.empty( ) )
  {
 int u = Q.front( ) ; Q.pop( ) ;
 int v = node[u].nxt ;
  ) { Q.push( v ) ; node[v].vis = true ; }
 } ans = inf ;
  ; x <= n ; ++x )
  {
  , j = node[x].nxt ;
 if( !node[x].vis )
  {
 while( j != x )
  {
 cnt++ ;
 node[j].vis = true ;
 j = node[j].nxt ;
  }
 ans = min( ans , cnt ) ;
  }

  }
 printf( "%d\n" , ans ) ;
 }

 int main( )
 {
  Init( ) ;
  input( ) ;
  sov( ) ;
  fclose( stdin ) ;
  fclose( stdout ) ;
  ;
 }

当然可以用tajan但我tajan最多只改到90分,就暴栈了QwQ ,不过改成bfs还是可以过,但我没写过 。

第三题就是搜索+剪枝,最开始我以为顺子越长越好,其实并不是QwQ,所以就只有45分 , 然后我就改成枚举了一下顺子的长度,然后就过了。

 #include <iostream>
 #include <cstdlib>
 #include <cstring>
 #include <cstdio>
 #define fo(a,b,c) for(int a=(b);a<=(c);a++)
  <<  ;
 using namespace std ;
 ] , c[] , ans ;

 inline void Init( )
 {
 freopen( "landlords.in" , "r" , stdin ) ;
 freopen( "landlords.out" , "w" , stdout ) ;
 }

 int read( )
 {
  , ret =  ;
  ; ch = getchar( ) ; }
  + ch - ' , ch = getchar( ) ;
 return ret * k ;
 }

 void input( )
 {
 int a , b ;
 fo( i ,  , n )
  {
 a = read( ) , b = read( ) ;
  ) a =  ; else if( a ) a-- ;
 s[a] ++ ;
  }
 }

 int quer( )
 {
 memset( c ,  , sizeof( c ) ) ;
 fo( i ,  ,  ) c[s[i]] ++ ;
 // cout<<c[1]<<" "<<c[2]<<" "<<c[3]<<" "<<c[4]<<endl;
  ;
 ] && c[]> ) c[]-- , c[] -=  , tot ++ ;
 ] && c[] >  ) c[] -- , c[] -=  , tot ++ ;
 ] && c[] ) c[]-- , c[] -- , tot ++ ;
 ] && c[] ) c[]-- , c[]-- , tot ++ ;
 ] && c[] ) c[]-- , c[]-- , tot++ ;
 ] + c[] + c[] + c[] ;
 }

 void dfs( int now )
 {
 if( now >= ans ) return ;
 int tmp = quer( ) ;
 if( tmp + now < ans ) ans = now + tmp ;
 fo( i ,  ,  )
  {
 int j = i ;
  ) ++j ;
  )
  {
 fo( j2 , i+ , j- )
  {
 fo( k , i , j2 ) s[k] -=  ;
 dfs( now +  ) ;
 fo( k , i , j2 ) s[k] +=  ;
  }
  }

  }
 fo( i ,  ,  )
  {
 int j = i ;
  ) ++j ;
  )
  {
 fo( j2 , i+ , j- )
  {
 fo( k , i , j2 ) s[k] -=  ;
 dfs( now +  ) ;
 fo( k , i , j2 ) s[k] +=  ;
  }
  }
  }

 fo( i ,  ,  )
  {
 int j = i ;
  ) ++j ;
  )
 fo( j2 , i+ , j- )
  {
 fo( k , i , j2 ) --s[k] ;
 dfs( now +  ) ;
 fo( k , i , j2 ) ++s[k] ;
  }
  }
 return ;
 }

 int main( )
 {
  Init( ) ;
 t = read( ) , n = read( );
 while( t-- )
  {
 memset( s ,  , sizeof(s) ) ;
 // memset( c , 0 , sizeof(c) ) ;
 ans = inf ;
  input( ) ;
 dfs(  ) ;
 printf( "%d\n" , ans ) ;
  }

  fclose( stdin ) ;
  fclose( stdout ) ;
  ;
 }
 

day2

第一题比较简单,就是一个二分嘛 ,虽然昨年没写出来qwq(昨年用堆贪心)

 #include <iostream>
 #include <cstdlib>
 #include <cstdio>
  <<  , maxn =  +   ;
 using namespace std ;
 int l , n , m  , a[maxn] ;

 inline void Init( )
 {
     freopen( "stone.in" , "r" , stdin ) ;
     freopen( "stone.out" , "w" , stdout ) ;
 }

 int read( )
 {
      , ret =  ;
      ; ch = getchar( ) ; }
      + ch - ' , ch = getchar( ) ;
     return ret * k ;
 }

 void input( )
 {
     l = read( ) , n = read( ) , m = read( ) ;
      ; x <= n ; ++x ) a[x] = read( ) ;
     a[n+] = l , ++n ;
 }

 bool check( int len )
 {
      , ans =  ;
      ; x <= n ; ++x )
     {
         if( a[x] - last < len ) ans++ ;
         else last = a[x] ;
         if( ans > m ) return false ;
     }
     return true ;
 }

 void sov( )
 {
      , rr = l ;
     while( ll <= rr )
     {
          ;
          ;
          ;
     }
     printf(  ) ;
 }

 int main(  )
 {
     Init( ) ;
     input( ) ;
     sov( ) ;
     fclose( stdin ) ;
     fclose( stdout ) ;
      ;
 }

第二题的话,就是方程式比较难推,QwQ我考场上写的记搜,结果空间复杂度算错 ,本来还是可以骗一点分的 ,

就是个dp,方程式其实还是比较好推,就是要想到一个前缀优化,然后滚一滚就可以过 。

 #include <iostream>
 #include <cstdlib>
 #include <cstdio>
  ;
 using namespace std ;
 int n , m , k ;
 ] , b[] ;
 ][][][] ;
 int main( )
 {
     scanf( "%d%d%d" , &n , &m , &k ) ;
     scanf(  , b+ ) ;
     f[][][][] =  , f[][][][] =  ;
      ; i <= n ; ++i )
     {
          ; j <= min( i , m) ; ++j )
         {
              ; l <= k ; ++l )
             {
                 ,last=(i-)&;
                 if( a[i] == b[j] )
                 {
                     f[j][l][][now] = ( f[j-][l-][][last] + f[j-][l-][][last] ) % mod + f[j-][l][][last] ;
                     f[j][l][][now] %= mod ;
                     f[j][l][][now] = ( f[j][l][][last] + f[j][l][][last] ) % mod ;
                 }
                 else
                 {
                     f[j][l][][now] = (f[j][l][][last]+f[j][l][][last])%mod ;
                     f[j][l][][now] =  ;
                 }
 //                    cout<<j<<" "<<l<<" "<<now<<" "<<f[j][l][1][now]<<" "<<f[j][l][0][now]<<endl;
             }
         }
     }
     printf( ][n&]+f[m][k][][n&])%mod ) ;
     ;
 }
												

noip 2015 提高组的更多相关文章

  1. NOIP 2015提高组复赛

    神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第 ...

  2. NOIP 2015 提高组 Day2

    期望得分:100+10+60=170 实际得分:100+10+35=145 http://www.cogs.pro/cogs/page/page.php?aid=16 T1 跳石头 时间限制:1 s  ...

  3. NOIP 2015 提高组 Day1

    期望得分:100+100+100=300 实际得分:100+100+45=245 T3 相似的代码 复制过去 没有改全,痛失55分 http://www.cogs.pro/cogs/page/page ...

  4. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  5. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】

    /*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...

  6. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  7. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  8. 最优贸易 NOIP 2009 提高组 第三题

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

  9. NOIP 2006 提高组 t1 能量项链

    题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...

随机推荐

  1. 用Eclipse 开发Dynamic Web Project应用程序 【转】

    简介:本文仅简单介绍基于Eclipse开发Dynamic Web Project应用下的JSP,Servlet及TOMCAT数据源的配置和开发. 软件环境: Eclipse Java EE IDE f ...

  2. 编程范式感想(一)——在C中进行对模板功能的实现

    最近一直在看网易公开课上的编程范式的公开课,斯坦福的教授讲的真的非常到位,感觉还是要好好学习下C还有汇编,熟悉下计算机的内存机制什么的. 大家都知道关于模板或者说范式的问题,基本在很多高级语言上都有实 ...

  3. Entity Framework Code First 数据迁移

    需要在[工具 --> NuGet 程序包管理器 --> 程序包管理器控制台]中输入三个命令: Enable-Migrations (初次迁移时使用) Add-Migration [为本次迁 ...

  4. VS2010升级VS2012必备(MVC4 WebPage2.0 Razor2.0资料汇集)

    刚把项目升级到2012,发现发生了很多变化,以下是最近看过的网站和资料汇集,供需要者参考. 本文在最近一个月可能会不断更新. Razor2.0 新特性介绍: 介绍1:http://vibrantcod ...

  5. SSM框架+Plupload实现断点续传(Spring+SpringMVC+MyBatis+Plupload)

    关于Plupload的介绍,相信它的官网http://www.plupload.com/已经给得很详细了.Plupload的上传原理简单点说,就是将用户选中的文件(可多个)分隔成一个个小块,依次向服务 ...

  6. vc6静态库的生成和调用

    转自vc6静态库的生成和调用 1.静态库的生成: 在vc6.0++中Ctrl+N选择Projects下的Win32 Static Library,Project name:SumLib,点击OK,下一 ...

  7. ECMall系统请求跳转分析

    ecmall是一个基于mvc模式框架系统,跟thinkphp有点像.先从ecmall的入口开始,ecmall入口文件upload/index.php.admin.php: index.php启动ecm ...

  8. 数据库水平拆分和垂直拆分区别(以mysql为例)

    数据库水平拆分和垂直拆分区别(以mysql为例) 数据库水平拆分和垂直拆分区别(以mysql为例)   案例:     简单购物系统暂设涉及如下表: 1.产品表(数据量10w,稳定) 2.订单表(数据 ...

  9. Python还是很重要的,不能丢。学习IF和WHILE

    number = 23 guess = int(input('Enter an interger : ')) if guess == number: print('Congratulations, y ...

  10. nc 命令汇总

    转自: http://blog.chinaunix.net/uid-20068039-id-359170.html 1.远程拷贝文件从server1拷贝文件到server2上.需要先在server2上 ...