[关闭]
@morehigh 2016-12-14T15:13:27.000000Z 字数 2239 阅读 1216

第二次作业
**Friendship of Frog **
题意:

  1. 给出一串小写字母,求两个相同字母最小距离为多少

解题思路:

  1. 直接暴力求解

ac代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. #define INF 1e9
  7. using namespace std;
  8. char a[1010];
  9. int main()
  10. {
  11. int t;
  12. int cas=1;
  13. cin>>t;
  14. while(t--)
  15. {
  16. scanf("%s",a);
  17. int ans=INF;
  18. for(int i=0;a[i]!='\0';i++)
  19. {
  20. for(int j=i+1;a[j]!='\0';j++)
  21. {
  22. if(a[i]==a[j])
  23. {
  24. ans=min(ans,j-i);
  25. break;
  26. }
  27. }
  28. }
  29. if(ans!=INF)
  30. cout<<"Case #"<<cas++<<": "<<ans<<endl;
  31. else
  32. cout<<"Case #"<<cas++<<": "<<"-1"<<endl;
  33. }
  34. return 0;
  35. }

**Li;nearization of the kernel functions in SVM **
题意:

  1. f(x,y,z) = ax^2 + by^2 + cy^2 + dxy + eyz + fzx + gx + hy + iz + j
  2. x^2 <-> p, y^2 <-> q, z^2 <-> r, xy <-> u, yz <-> v, zx <-> w
  3. g(p,q,r,u,v,w,x,y,z) = ap + bq + cr + du + ev + fw + gx + hy + iz + j
  4. 形成f->g的一个映射,给出a, b, c, d, e, f, g, h, i, j,将g输出

解题思路:

  1. 做这道题的时候,发现自己的想法有好多漏洞,其中要考虑“+”什么时候加,系数为1和-1时的情况,系数为0的情况,系数全为0的情况。

ac代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <iostream>
  5. using namespace std;
  6. char ss[] = {'p', 'q', 'r', 'u', 'v', 'w', 'x', 'y', 'z', '\0'};
  7. int a[15];
  8. int main (){
  9. int t;
  10. scanf("%d", &t);
  11. while(t--){
  12. for(int i = 0; i < 10; ++i)
  13. scanf("%d", &a[i]);
  14. int ans = 0;
  15. int flag = 0;
  16. for(int i = 0; i < 9; ++i){
  17. if(a[i] == 0) continue;
  18. if(a[i] == 1 ){
  19. if(flag)
  20. printf("+");
  21. else
  22. flag++;
  23. printf("%c", ss[i]);
  24. continue;
  25. }
  26. if(a[i] == -1){
  27. printf("-%c", ss[i]);
  28. flag++;
  29. continue;
  30. }
  31. if(a[i] > 0){
  32. if(flag)
  33. printf("+");
  34. else
  35. flag++;
  36. printf("%d%c", a[i], ss[i]);
  37. }
  38. else
  39. printf("%d%c", a[i], ss[i]), flag++;
  40. }
  41. if(a[9] > 0){
  42. if(flag)
  43. printf("+");
  44. else
  45. flag++;
  46. printf("%d", a[9]);
  47. }
  48. else if( a[9] < 0){
  49. flag ++;
  50. printf("%d", a[9]);
  51. }
  52. if(!flag)
  53. printf("0");
  54. printf("\n");
  55. }
  56. return 0;
  57. }

**Game with Pearls **
题意:

  1. Jerry Tom 玩一个游戏 给你 n 个盒子 a[ i ] 表示开始时
  2. i 个盒子中的小球的个数 然后 Jerry 可以在每个盒子里加入0k的倍数的小球
  3. 操作完后,Jerry 可以重新排列盒子的顺序,最终使第i个盒子中有i个小球。若Jerry
  4. 使最终的盒子变成那样,就输出 Jerry ,否则输出 Tom

题解:

  1. M<=500,1 <= N <= 100, 1 <= K <= N,暴力搜索能够直接让a[j]加上k的整数倍或者是0,得到的数若为i,然后把这个数的位置进行标记,并把这个数赋值为i,直到i==n,然后匹配是否满足1--n所有的数。

ac代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. #define N 101234
  7. using namespace std;
  8. int a[120];
  9. int flag[120];
  10. bool cmp(int x,int y)
  11. {
  12. return x<y;
  13. }
  14. int main()
  15. {
  16. int n,k,t;
  17. cin>>t;
  18. while(t--)
  19. {
  20. cin>>n>>k;
  21. for(int i=1;i<=n;i++)
  22. {
  23. scanf("%d",&a[i]);
  24. }
  25. memset(flag,0,sizeof(flag));
  26. sort(a+1,a+n+1,cmp);
  27. for(int i=1;i<=n;i++)
  28. {
  29. for(int j=1;j<=n;j++)
  30. {
  31. if(a[j]<=i){
  32. if((i-a[j])%k==0&&!flag[j])
  33. {
  34. flag[j]=1;
  35. a[j]=i;
  36. break;
  37. }
  38. }
  39. }
  40. }
  41. int mm=0;
  42. sort(a+1,a+n+1,cmp);
  43. for(int i=1;i<=n;i++)
  44. {
  45. if(a[i]!=i)
  46. mm=1;
  47. }
  48. if(mm==0)
  49. printf("Jerry\n");
  50. else
  51. printf("Tom\n");
  52. }
  53. return 0;
  54. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注