A.Babs' Box Boutique

一道简单的dfs搜索题,需要两两比较,然后搜到底,得到最大值就行了。比赛时队友写的,我只负责debug。。赛后自己写的。。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<string>
  6. #include<cmath>
  7. #include<set>
  8. #include<vector>
  9. #include<stack>
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define FOR(a,b,i) for(i=a;i<=b;++i)
  12. #define For(a,b,i) for(i=a;i<b;++i)
  13. #define N 1000000007
  14. using namespace std;
  15. inline void RD(int &ret)
  16. {
  17. char c;
  18. do
  19. {
  20. c=getchar();
  21. }
  22. while(c<'0'||c>'9');
  23. ret=c-'0';
  24. while((c=getchar())>='0'&&c<='9')
  25. {
  26. ret=ret*10+(c-'0');
  27. }
  28. }
  29. inline void OT(int a)
  30. {
  31. if(a>=10)
  32. {
  33. OT(a/10);
  34. }
  35. putchar(a%10+'0');
  36. }
  37. struct xl
  38. {
  39. int x,y,z;
  40. } a[11];
  41. int n,ans,v[11];
  42. void dfs(int x,int y,int d)
  43. {
  44. ans=max(d,ans);
  45. if(d==n)
  46. {
  47. return ;
  48. }
  49. int i;
  50. for(i=0; i<n; ++i)
  51. {
  52. if(v[i]==0)
  53. {
  54. if(a[i].x>=x&&a[i].y>=y)//对应比较
  55. {
  56. v[i]=1;
  57. dfs(a[i].x,a[i].y,d+1);
  58. v[i]=0;
  59. }
  60. else if(a[i].x>=x&&a[i].z>=y)
  61. {
  62. v[i]=1;
  63. dfs(a[i].x,a[i].z,d+1);
  64. v[i]=0;
  65. }
  66. else if(a[i].y>=x&&a[i].z>=y)
  67. {
  68. v[i]=1;
  69. dfs(a[i].y,a[i].z,d+1);
  70. v[i]=0;
  71. }
  72. }
  73. }
  74. }
  75. int main()
  76. {
  77. int i,t[4],cas=0;
  78. while(1)
  79. {
  80. RD(n);
  81. if(n==0)
  82. {
  83. break;
  84. }
  85. cas++;
  86. for(i=0; i<n; ++i)
  87. {
  88. RD(t[0]);
  89. RD(t[1]);
  90. RD(t[2]);
  91. sort(t,t+3);//注意排序
  92. a[i].x=t[0];
  93. a[i].y=t[1];
  94. a[i].z=t[2];
  95. }
  96. ans=0;
  97. mem(v,0);
  98. dfs(0,0,0);
  99. printf("Case %d: ",cas);
  100. OT(ans);
  101. printf("\n");
  102. }
  103. return 0;
  104. }

B.Flash Mob

简单的求中位数和曼哈顿距离,直接对xi和yi分别排序,然后取中位数,中位数与其他点求曼哈顿距离。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<string>
  6. #include<cmath>
  7. #include<set>
  8. #include<vector>
  9. #include<stack>
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define FOR(a,b,i) for(i=a;i<=b;++i)
  12. #define For(a,b,i) for(i=a;i<b;++i)
  13. #define N 1000000007
  14. using namespace std;
  15. inline void RD(int &ret)
  16. {
  17. char c;
  18. do
  19. {
  20. c=getchar();
  21. }
  22. while(c<'0'||c>'9');
  23. ret=c-'0';
  24. while((c=getchar())>='0'&&c<='9')
  25. {
  26. ret=ret*10+(c-'0');
  27. }
  28. }
  29. inline void OT(int a)
  30. {
  31. if(a>=10)
  32. {
  33. OT(a/10);
  34. }
  35. putchar(a%10+'0');
  36. }
  37. int x[1001],y[1001],n;
  38. int f(int a,int b)
  39. {
  40. int sum=0,i;
  41. FOR(1,n,i)
  42. {
  43. sum+=abs(a-x[i]+b-y[i]);
  44. }
  45. return sum;
  46. }
  47. int main()
  48. {
  49. int i,cas=0;
  50. while(1)
  51. {
  52. RD(n);
  53. if(n==0)
  54. {
  55. break;
  56. }
  57. cas++;
  58. for(i=1;i<=n;++i)
  59. {
  60. scanf("%d%d",&x[i],&y[i]);
  61. }
  62. sort(x+1,x+n+1);
  63. sort(y+1,y+n+1);
  64. printf("Case %d: (%d,%d) %d\n",cas,x[(1+n)/2],y[(n+1)/2],f(x[(1+n)/2],y[(n+1)/2]));
  65. }
  66. return 0;
  67. }

C.Hexagon Perplexagon

一道枚举题,可以dfs搜,也可以用next_permutation得到所有情况然后暴力查找符合条件的值,我用的是next_permutation,险过。。。需要用到二维数组标记。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<string>
  6. #include<cmath>
  7. #include<set>
  8. #include<vector>
  9. #include<stack>
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define FOR(a,b,i) for(i=a;i<=b;++i)
  12. #define For(a,b,i) for(i=a;i<b;++i)
  13. #define N 1000000007
  14. using namespace std;
  15. inline void RD(int &ret)
  16. {
  17. char c;
  18. do
  19. {
  20. c=getchar();
  21. }
  22. while(c<'0'||c>'9');
  23. ret=c-'0';
  24. while((c=getchar())>='0'&&c<='9')
  25. {
  26. ret=ret*10+(c-'0');
  27. }
  28. }
  29. inline void OT(int a)
  30. {
  31. if(a>=10)
  32. {
  33. OT(a/10);
  34. }
  35. putchar(a%10+'0');
  36. }
  37. int a[11][11],p[11][11],id[11],high[11],low[11];
  38. int main()
  39. {
  40. int t,i,j,tt,cas=0;
  41. bool f,g;
  42. RD(t);
  43. while(t--)
  44. {
  45. cas++;
  46. for(i=0; i<7; ++i)
  47. {
  48. id[i]=i;
  49. for(j=0; j<6; ++j)
  50. {
  51. RD(a[i][j]);
  52. }
  53. for(j=0; j<6; ++j)
  54. {
  55. p[i][a[i][j]]=j;//标记数组
  56. }
  57. }
  58. f=false;
  59. do
  60. {
  61. for(i=1; i<7; ++i)
  62. {
  63. tt=p[id[0]][1]+i-1;
  64. if(tt>=6)
  65. {
  66. tt-=6;
  67. }
  68. j=a[id[0]][tt];
  69. tt=p[id[i]][j]+1;
  70. if(tt>=6)
  71. {
  72. tt-=6;
  73. }
  74. low[i]=a[id[i]][tt];
  75. tt=p[id[i]][j]-1;
  76. if(tt<0)
  77. {
  78. tt+=6;
  79. }
  80. high[i]=a[id[i]][tt];
  81. }
  82. low[7]=low[1];
  83. g=true;
  84. for(i=1; i<7; ++i)
  85. {
  86. if(high[i]!=low[i+1])//左右比较
  87. {
  88. g=false;
  89. break;
  90. }
  91. }
  92. if(g==true)
  93. {
  94. f=true;
  95. break;
  96. }
  97. }
  98. while(next_permutation(id,id+7));
  99. printf("Case %d: ",cas);
  100. if(f==true)
  101. {
  102. for(i=0; i<6; ++i)
  103. {
  104. printf("%d ",id[i]);
  105. }
  106. printf("%d\n",id[6]);
  107. }
  108. else
  109. {
  110. printf("No solution\n");
  111. }
  112. }
  113. return 0;
  114. }

D.I've Got Your Back(gammon)

一道映射题,表示不同的检索方式和不同的数代表不同的序列。。。直接暴力就行。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<string>
  6. #include<cmath>
  7. #include<set>
  8. #include<vector>
  9. #include<stack>
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define FOR(a,b,i) for(i=a;i<=b;++i)
  12. #define For(a,b,i) for(i=a;i<b;++i)
  13. #define N 1000000007
  14. using namespace std;
  15. inline void RD(int &ret)
  16. {
  17. char c;
  18. do
  19. {
  20. c=getchar();
  21. }
  22. while(c<'0'||c>'9');
  23. ret=c-'0';
  24. while((c=getchar())>='0'&&c<='9')
  25. {
  26. ret=ret*10+(c-'0');
  27. }
  28. }
  29. inline void OT(int a)
  30. {
  31. if(a>=10)
  32. {
  33. OT(a/10);
  34. }
  35. putchar(a%10+'0');
  36. }
  37. int a[6],an[6],num,f[6][16][16];
  38. char c[2];
  39. void init()
  40. {
  41. int i,j,k;
  42. For(0,6,j)
  43. {
  44. For(0,16,i)
  45. {
  46. For(0,16,k)
  47. {
  48. f[j][i][k]=0;
  49. }
  50. }
  51. }
  52. }
  53. int main()
  54. {
  55. init();
  56. int i,j,k,l;
  57. FOR(1,15,i)//预处理
  58. {
  59. FOR(1,15,j)
  60. {
  61.  
  62. if(j==i)
  63. {
  64. f[0][j][i]=1;
  65. }
  66. else
  67. {
  68. f[0][j][i]=0;
  69. }
  70. f[0][0][i]+=f[0][j][i];
  71. }
  72. }
  73. For(1,6,k)
  74. {
  75. FOR(1,15,j)
  76. {
  77. f[k][j][j]=1;
  78. f[k][0][j]+=1;
  79. for(i=j+1; i<=15; i++)
  80. {
  81. for(l=k-1; l>=0; l--)
  82. {
  83. f[k][j][i]+=f[l][0][i-j];
  84. }
  85. f[k][0][i]+=f[k][j][i];
  86. }
  87. }
  88. }
  89. int cas=0,num,sum,ans,tmp;
  90. while(scanf("%s",c))
  91. {
  92. cas++;
  93. if(c[0]=='m')
  94. {
  95. For(0,6,i)
  96. {
  97. RD(a[i]);
  98. }
  99. num=15;
  100. ans=0;
  101. For(0,6,j)
  102. {
  103. if(a[j]>0)
  104. {
  105. for(i=4-j; i>=0; i--)
  106. {
  107. for(k=num-a[j]+1; k<=num; k++)
  108. {
  109. ans+=f[i][0][k];
  110. }
  111. }
  112. }
  113. num-=a[j];
  114. if(num==0)
  115. {
  116. ans++;
  117. break;
  118. }
  119. }
  120. printf("Case %d: %d\n",cas,ans-1);
  121. }
  122. else if(c[0]=='u')
  123. {
  124. For(0,6,j)
  125. {
  126. an[j]=0;
  127. }
  128. scanf("%d",&sum);
  129. sum++;
  130. num=15;
  131. ans=0;
  132. while(num>0)
  133. {
  134. ans=0;
  135. for(j=0; j<6; j++)
  136. {
  137. ans+=f[j][0][num];
  138. if(ans>=sum)
  139. {
  140. break;
  141. }
  142. }
  143. if(ans==sum)
  144. {
  145. an[j]=num;
  146. break;
  147. }
  148. ans-=f[j][0][num];
  149. sum-=ans;
  150. FOR(1,num,i)
  151. {
  152. tmp=0;
  153. For(0,j,k)
  154. {
  155. tmp+=f[k][0][num-i];
  156. }
  157. if(tmp>=sum)
  158. {
  159. break;
  160. }
  161. else
  162. {
  163. sum-=tmp;
  164. }
  165. }
  166. num-=i;
  167. an[j]=i;
  168. }
  169. printf("Case %d: %d %d %d %d %d %d\n",cas,an[5],an[4],an[3],an[2],an[1],an[0]);
  170. }
  171. else
  172. {
  173. break;
  174. }
  175. }
  176. return 0;
  177. }

F.Road Series

。。。UESTC和UVALive两个source的题目限时不同,我一直交UESTC,TLE到死。。。。

交了UVALive就A了,我不想再说什么了,无力了~~~~~~

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<string>
  6. #include<cmath>
  7. #include<set>
  8. #include<vector>
  9. #include<stack>
  10. #define mem(a,b) memset(a,b,sizeof(a))
  11. #define FOR(a,b,i) for(i=a;i<=b;++i)
  12. #define For(a,b,i) for(i=a;i<b;++i)
  13. #define N 1000000007
  14. using namespace std;
  15. inline void RD(int &ret)
  16. {
  17. char c;
  18. do
  19. {
  20. c=getchar();
  21. }
  22. while(c<'0'||c>'9');
  23. ret=c-'0';
  24. while((c=getchar())>='0'&&c<='9')
  25. {
  26. ret=ret*10+(c-'0');
  27. }
  28. }
  29. inline void OT(int a)
  30. {
  31. if(a>=10)
  32. {
  33. OT(a/10);
  34. }
  35. putchar(a%10+'0');
  36. }
  37. set<int>p;
  38. set<int>::iterator it;
  39. string q[1001],ss;
  40. char s[1001];
  41. int k,w,tt;
  42. int main()
  43. {
  44. int t,cas=0,m,i,j,l,sum,a,o;
  45. bool f;
  46. RD(t);
  47. while(t--)
  48. {
  49. cas++;
  50. scanf("%d%d",&k,&w);
  51. gets(s);
  52. p.clear();
  53. m=0;
  54. for(o=0;o<k;++o)
  55. {
  56. gets(s);
  57. tt=0;
  58. l=strlen(s);
  59. ss="";
  60. for(j=0; j<l; ++j)
  61. {
  62. if(s[j]>='0'&&s[j]<='9')
  63. {
  64. ss+=s[j];
  65. }
  66. else
  67. {
  68. q[tt++]=ss;
  69. ss="";
  70. }
  71. }
  72. if(s[l-1]>='0'&&s[l-1]<='9')
  73. {
  74. q[tt++]=ss;
  75. }
  76. while(true)
  77. {
  78. if(p.find(m+1)!=p.end())
  79. {
  80. p.erase(m+1);
  81. ++m;
  82. continue;
  83. }
  84. for(i=1; i<=w; ++i)
  85. {
  86. ss="";
  87. a=m+i;
  88. if(a==0)
  89. {
  90. ss="0";
  91. }
  92. while(a)
  93. {
  94. ss=char(a%10+48)+ss;
  95. a/=10;
  96. }
  97. f=false;
  98. for(j=0; j<tt; ++j)
  99. {
  100. if(q[j].find(ss)!=-1)
  101. {
  102. f=true;
  103. break;
  104. }
  105. }
  106. if(f)
  107. {
  108. p.insert(m+i);
  109. }
  110. }
  111. if (p.find(m+ 1)!=p.end())
  112. {
  113. continue;
  114. }
  115. break;
  116. }
  117. }
  118. sum=m;
  119. for(it=p.begin(); it != p.end(); it++)
  120. {
  121. sum=max(sum,*it);
  122. }
  123. printf("Case %d: %d %d\n",cas,m,sum);
  124. }
  125. return 0;
  126. }

G.Show Me the Money

汇率兑换,需要用到弗洛伊德算法求最短路的方式得到兑换方式。。。没考虑太多,居然1A,学长说题目说没有重边,但数据里有。。。额,我也没仔细看太清题目,喜闻乐见了~~~

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<string>
  6. #include<cmath>
  7. #include<set>
  8. #include<vector>
  9. #include<stack>
  10. #include<map>
  11. #define mem(a,b) memset(a,b,sizeof(a))
  12. #define FOR(a,b,i) for(i=a;i<=b;++i)
  13. #define For(a,b,i) for(i=a;i<b;++i)
  14. #define N 1000000007
  15. using namespace std;
  16. inline void RD(int &ret)
  17. {
  18. char c;
  19. do
  20. {
  21. c=getchar();
  22. }
  23. while(c<'0'||c>'9');
  24. ret=c-'0';
  25. while((c=getchar())>='0'&&c<='9')
  26. {
  27. ret=ret*10+(c-'0');
  28. }
  29. }
  30. inline void OT(int a)
  31. {
  32. if(a>=10)
  33. {
  34. OT(a/10);
  35. }
  36. putchar(a%10+'0');
  37. }
  38. map<string,int>q;
  39. string ss[11];
  40. long long a[11][11];
  41. int ans,m;
  42. string p1,p2,p;
  43. void f()
  44. {
  45. int i,j,k,id,num,l;
  46. long long sum=-1,in,aa,bb;
  47. char h[22];
  48. FOR(1,ans,i)//floyd
  49. {
  50. FOR(1,ans,j)
  51. {
  52. if(i!=j)
  53. {
  54. FOR(1,ans,k)
  55. {
  56. if(i!=k&&j!=k)//去重边
  57. {
  58. if(a[j][i]==0||a[i][j]==0)
  59. {
  60. continue;
  61. }
  62. if(a[j][k]!=0)
  63. {
  64. continue;
  65. }
  66. a[j][k]=a[j][i]*a[i][k];
  67. a[k][j]=a[k][i]*a[i][j];
  68. }
  69. }
  70. }
  71. }
  72. }
  73. id=q[p];
  74. FOR(1,ans,i)
  75. {
  76. if(i!=id&&a[i][id]!=0)
  77. {
  78. in=(long long)m*a[i][id]/a[id][i];
  79. if(in*a[id][i]<(long long)m*a[i][id])
  80. {
  81. in++;
  82. }
  83. if(in<=100000)
  84. {
  85. if(sum==-1||in*a[id][i]*bb<sum*aa*a[i][id])
  86. {
  87. sum=in;
  88. num=i;
  89. aa=a[id][i];
  90. bb=a[i][id];
  91. }
  92. }
  93. }
  94. }
  95. l=ss[num].size();
  96. for(i=0; i<l; ++i)
  97. {
  98. h[i]=ss[num][i];
  99. }
  100. h[l]=0;
  101. printf("%lld %s\n",sum,h);
  102. }
  103. int main()
  104. {
  105. int t,i,cas=0,x,y;
  106. char s[11],s1[11],s2[11];
  107. while(1)
  108. {
  109. RD(t);
  110. if(t==0)
  111. {
  112. break;
  113. }
  114. cas++;
  115. q.clear();
  116. ans=0;
  117. mem(a,0);
  118. while(t--)
  119. {
  120. scanf("%d%s%s%d%s",&x,s1,s,&y,s2);
  121. p1.assign(s1);
  122. p2.assign(s2);
  123. if(q[p1]==0)//map去重
  124. {
  125. q[p1]=++ans;
  126. }
  127. ss[q[p1]]=p1;
  128. if(q[p2]==0)
  129. {
  130. q[p2]=++ans;
  131. }
  132. ss[q[p2]]=p2;
  133. a[q[p1]][q[p2]]=x;
  134. a[q[p2]][q[p1]]=y;
  135. }
  136. scanf("%d%s",&m,s);
  137. printf("Case %d: ",cas);
  138. p.assign(s);
  139. f();
  140. }
  141. return 0;
  142. }

这次做得还行,但前面的水题出得太慢了,导致其它题也没怎么看。。。

130825组队赛-Regionals 2012, North America - East Central NA的更多相关文章

  1. 组队练习赛(Regionals 2012, North America - East Central NA)

    A.Babs' Box Boutique 给定n个盒子,每个盒子都有长宽高(任意两个盒子长宽高不完全相同),现在选盒子的任意两面,要求x1 <= x2 && y1 <= y ...

  2. Regionals 2012, North America - Greater NY 解题报告

    这套题..除了几何的都出了 完全没时间学几何.杯具 A,B,J 水题不解释 C.Pen Counts 这题的话 写几个不等式限制边得范围就行了 然后枚举最小边 D.Maximum Random Wal ...

  3. HNU 13064 Cuckoo for Hashing解题报告 North America - East Central 2013

    题目大意:使用两个哈希表来解决哈希冲突的问题.假如现在有两个哈希表分别为:H1,H2 ,大小分别为:n1,n2:现有一数据X需要插入,其插入方法为: 1.计算index1 = X MOD N1,  若 ...

  4. Regionals 2013 :: North America - Southeast USA

    Regionals 2013 :: North America - Southeast USA It Takes a Village As a Sociologist, you are studyin ...

  5. 2015 UESTC Winter Training #6【Regionals 2010 >> North America - Rocky Mountain】

    2015 UESTC Winter Training #6 Regionals 2010 >> North America - Rocky Mountain A - Parenthesis ...

  6. MPI Maelstrom(East Central North America 1996)(poj1502)

    MPI Maelstrom 总时间限制:  1000ms 内存限制:  65536kB 描述 BIT has recently taken delivery of their new supercom ...

  7. ICPC North Central NA Contest 2018

    目录 ICPC North Central NA Contest 2018 1. 题目分析 2. 题解 A.Pokegene B.Maximum Subarrays C.Rational Ratio ...

  8. poj 2732 Countdown(East Central North America 2005)

    题意:建一个家庭树,找出有第d代子孙的名字,按照要求的第d代子孙的数从大到小输出三个人名,如果有一样大小子孙数的,就按字母序从小到大将同等大小的都输出,如果小于三个人的就全输出. 题目链接:http: ...

  9. East Central North America Region 2015

    E 每过一秒,当前点会把它的值传递给所有相邻点,问t时刻该图的值 #include <iostream> #include <cstdio> #include <algo ...

随机推荐

  1. vim插件管理之Vundle

    Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.正是由于其可定制的特性, 许许多多的Vim插件便诞生了.管理这些插件又成为我们最为头疼的问题,最近无 ...

  2. android自动化(appium)

    目录 一.Appium环境搭建 1.下载nodejs,并安装 2.下载appium,并安装 3.安装python.安装pip.安装appium 4.安装java的jdk 5.安装andriod的sdk ...

  3. 数据切分——Mysql分区表的管理与维护

    关于Mysql分区表的介绍可以参考: http://blog.csdn.net/jhq0113/article/details/44592865 关于Mysql分区表的创建可以参考: http://b ...

  4. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  5. 关于异或(Xor)的一点笔记

    因为博弈论里,尤其实在求sg函数时,经常会用到异或运算,所以我就把网上搜到的一些相关知识和自己的一些理解记下来. 如果出现差错,还请指出,谢谢! 异或:可以简称Xor,可以用数学符号⊕表示,计算机就一 ...

  6. Swift--基本数据类型(一)

    不像更多语言中,X不要求你写一个分号(;)在你的代码中的每一个语句后,尽管能够这样做.然而,假设你想在一行中写入多个单独的语句分号是必需的: .    1  let cat = "" ...

  7. Linux上传下载文件命令

    转载自http://lupingui.iteye.com/blog/239694 linux系统下可以直接从客户端上传文件到服务器端,命令格式: [plain] view plaincopy scp  ...

  8. maven 构建web项目index.jsp报错

    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path... 解决 ...

  9. Google Code Jam Round 1A 2015 Problem B. Haircut 二分

    Problem You are waiting in a long line to get a haircut at a trendy barber shop. The shop has B barb ...

  10. django-model-utils

    一个普通例子: todos = Todo.objects.filter(owner=request.user).filter(is_done=False).filter(priority=1) 弊端: ...