随笔分类 -  杭电暑假多校赛第四场

杭电多校赛暑假第四场
HDU4635
摘要:/*最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯定是一个完全图,Y部也是,同时X部中每个点到Y部的每个点都有一条边,假设X部有x个点,Y部有y个点,有x+y=n,同时边数F=x*y+x*(x-1)+y*(y-1),整理得:F=N*N-N-x*y,当x+y为定值时,二者越接近,x*y越大,所以要使得边数最多,那么X部和Y部的点数的个数差距就要越大,所以首先对于给定的有向图缩点,对于缩点后的每个点,如果100它的出度或者入度为0,那么它才有可能成为X部或者Y部,所以只要求缩点之后的出度或者入度为0的点中,包含节点数最少的那个点,令 阅读全文

posted @ 2013-08-03 01:38 ok_boy 阅读(298) 评论(0) 推荐(0)

HDU4638
摘要:1 /*树状数组求和,一边询问一边维护,离线处理*/ 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxn=100000+10; 7 struct point 8 { 9 int l,r,index; 10 }node[maxn]; 11 int a[maxn]; 12 int num[maxn]; 13 int index[maxn]; 14 int result[maxn]; 15 int n,m; 16 bool cmp(const point a,const poin... 阅读全文

posted @ 2013-08-02 10:27 ok_boy 阅读(309) 评论(0) 推荐(0)

HDU4642
摘要:1 #include 2 #include 3 int main() 4 { 5 int i,j,n,m; 6 int t; 7 scanf("%d",&t); 8 while(t--) 9 {10 scanf("%d%d",&n,&m);11 n=n*m;12 j=0;13 for(i=1;i<=n;i++)14 {15 scanf("%d",&m);16 if(m && i==n) j=1;17 ... 阅读全文

posted @ 2013-08-01 22:02 ok_boy 阅读(266) 评论(0) 推荐(0)

HDU4632
摘要:1 /* 2 区间dp 3 dp[i][j]表示这个区间组成的子串是回文串的个数*/ 4 #include 5 #include 6 const int maxn=1010; 7 int mod=10007; 8 int dp[maxn][maxn]; 9 void init(int len)10 {11 memset(dp, 0, sizeof(dp));12 for(int i = 0; i < len; ++i)13 {14 dp[i][i] = 1;//处理一个字符的情况15 }16 }17 int main()18 {19 i... 阅读全文

posted @ 2013-08-01 21:41 ok_boy 阅读(337) 评论(0) 推荐(0)

HDU4639
摘要:1 /*计算里面有多少个相邻的he,1个he就是1种意思,两个就是,两种,所以这是 2 一个斐波拉期数列,间隔的hehe互不影响所以是互斥事件,直接相乘就可以*/ 3 #include 4 #include 5 const int maxn=10086+10; 6 const int mod=10007; 7 int fb[maxn]; 8 void init() 9 {10 int i;11 fb[0]=fb[1]=1;12 for(i=2;i<maxn;i++)13 {14 fb[i]=(fb[i-1]+fb[i-2])%mod;15 ... 阅读全文

posted @ 2013-08-01 20:45 ok_boy 阅读(289) 评论(0) 推荐(0)

导航