4375: 孪生素数 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 324            Accepted:91

Description

所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了,就象孪生兄弟一样。最小的孪生素数是 (3, 5),在 100 以内的孪生素数还有 (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61) 和 (71, 73),总计有 8 组。但是随着数字的增大,孪生素数的分布变得越来越稀疏,寻找孪生素数也变得越来越困难。那么会不会在超过某个界限之后就再也不存在孪生素数了呢?

孪生素数有无穷多对!这个猜想被称为孪生素数猜想,至今没有被严格证明。但借助于计算机我们确实可以找到任意大数范围内的所有孪生素数对,接下来给定一个数k,求第k组孪生素数。

Input

输入数据有多组,每行为一个正整数k(1<= k <=10000)。

Output

输出有两个整数,以空格隔开,表示第k组孪生素数。

Sample Input

1

Sample Output

3 5

素数序列Pn,其中Pi+1-Pi=2为孪生素数(素数永远是人们着迷的话题,包括今年非常火的黎曼猜想)

我们可以知道,这个数并不多,但是让求的也不多,暴力走一波

1可以先预处理出这些数,判断x和x+2都是素数

Solution from kelenb

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<math.h>
  4. using namespace std;
  5. bool x(int m)
  6. {
  7. int i;
  8. int t=sqrt(m);
  9. for(i=;i<=t;i++)
  10. {
  11. if(m%i==)
  12. return false;
  13. }
  14. return true;
  15. }
  16. int main()
  17. { int a[];
  18. int i,j,n,k=;
  19. for(i=;i<;i++)
  20. {
  21. if(x(i)&&x(i+))
  22. a[k++]=i;
  23. }
  24. while(scanf("%d",&n)!=EOF)
  25. {
  26. printf("%d %d\n",a[n-],a[n-]+);
  27. }
  28. }

2预处理素数表然后去保存答案的,这个当然要快一些

Solution from 1025044866

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<string>
  5. #include<cmath>
  6. using namespace std;
  7. bool a[];
  8. int b[];
  9. int h;
  10. struct didi
  11. {
  12. int x,y;
  13. } c[];
  14. void pf()
  15. {
  16. a[]=a[]=true;
  17. for(int i=; i<=sqrt(); i++)
  18. {
  19. if(!a[i])
  20. {
  21. for(int j=i+i; j<=; j+=i)
  22. a[j]=true;
  23. }
  24. }
  25. h=;
  26. for(int i=; i<; i++)
  27. {
  28. if(!a[i])
  29. b[h++]=i;
  30. }
  31. int num=;
  32. for(int i=; i<h; i++)
  33. {
  34. if(b[i]-b[i-]==)
  35. {
  36. c[num].x=b[i-];
  37. c[num++].y=b[i];
  38. if(num==)
  39. break;
  40. }
  41. }
  42. }
  43. int main()
  44. {
  45. pf();
  46. int n;
  47. while(scanf("%d",&n)!=EOF)
  48. {
  49. printf("%d %d\n",c[n].x,c[n].y);
  50.  
  51. }
  52. }

5471: 数据结构实验--图的最小代价生成树 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 62            Accepted:14

Description

求带权无向图的最小代价生成树。

Input

输入数据为多组,每组数据包含多行,第一行为2个整数n,e,n为图的顶点数,e为边数,接下来是e行,每行3个整数,前两个整数是一个顶点对,代表一条边所依附的两个顶点,第3个整数是边的权值。

所有值不超过20。

Output

请使用prim算法生成一棵生成树,并输出为生成树的各条边及其权值。格式见样例。

Sample Input

5 7
1 2 1
1 3 1
2 3 4
2 4 2
2 5 1
3 4 5
4 5 6

Sample Output

 

1 2 1
1 3 1
2 5 1
2 4 2

B题就是Prim算法,但是呢,需要去理解这个模板吧(Prim加点,Kruskal加边)

Solution from taozi

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. const int INF=0x3f3f3f3f;
  5. int lowc[N],vis[N],G[N][N],fa[N];
  6. int Prim(int n)
  7. {
  8. vis[]=;
  9. for(int i=;i<=n;i++)lowc[i]=G[][i],fa[i]=;
  10. for(int i=;i<=n;i++)
  11. {
  12. int minc=INF;
  13. int p=-;
  14. for(int j=;j<=n;j++)
  15. if(!vis[j]&&minc>lowc[j])
  16. minc=lowc[j],p=j;
  17. printf("%d %d %d\n",fa[p],p,minc);
  18. vis[p]=;
  19. for(int j=;j<=n;j++)
  20. if(!vis[j]&&lowc[j]>G[p][j])
  21. lowc[j]=G[p][j],fa[j]=p;
  22. }
  23. }
  24. int main()
  25. {
  26. int n,e,u,v,w;
  27. while(scanf("%d%d",&n,&e)!=EOF)
  28. {
  29. memset(G,INF,sizeof(G));
  30. memset(vis,,sizeof(vis));
  31. for(int i=;i<e;i++)
  32. {
  33. scanf("%d%d%d",&u,&v,&w);
  34. G[u][v]=G[v][u]=w;
  35. }
  36. Prim(n);
  37. }
  38. return ;
  39. }

5488: 石子归并II

N堆石子摆成一个环。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。

例如: 1 2 3 4,有不少合并方法

1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)

1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)

1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)

括号里面为总代价可以看出,第一种方法的代价最低,现在给出n堆石子的数量,计算最小合并代价。

Input

第1行:N(2 <= N <= 1000)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)

Output

输出最小合并代价。

Sample Input

4
1
2
3
4

Sample Output

 19

区间DP+四边形优化

属于拉题人强行引导题,比较困难,有时间的可以去学学 学习博客

solution from zdragon

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF=0x3f3f3f3f;
  4. int dp[][];
  5. int a[][],pre[][],s[][];
  6. int main()
  7. {
  8. int n;
  9. scanf("%d",&n);
  10. for(int i=;i<=n;i++)
  11. scanf("%d",&a[i][i]),a[i+n][i+n]=a[i][i];
  12. for(int i=;i<=n<<;i++)
  13. for(int j=i;j<=n<<;j++)
  14. pre[i][j]=pre[i][j-]+a[j][j];
  15. memset(dp,INF,sizeof dp);
  16. for(int i=;i<=n<<;i++)
  17. s[i][i]=i,dp[i][i]=;
  18. for(int l=;l<n;l++)
  19. for(int i=;i+l<=n<<;i++)
  20. {
  21. int j=i+l;
  22. for(int k=s[i][j-];k<=s[i+][j];k++)
  23. if(dp[i][j]>dp[i][k]+dp[k+][j]+pre[i][j])
  24. dp[i][j]=dp[i][k]+dp[k+][j]+pre[i][j],s[i][j]=k;
  25. }
  26. int minn=INF;
  27. for(int i=;i<=n;i++)
  28. minn=min(minn,dp[i][i+n-]);
  29. printf("%d\n",minn);
  30. return ;
  31. }

4025: 游西湖 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 149            Accepted:62

Description

游山玩水是zzd的爱好之一,一天,zzd和朋友一共N个人在西湖游玩游玩,看到西湖这么宽,大家都想划船到对岸去,但是一艘船只能容纳两个人,当然也可以一个人划的,像zzd这样的胖子一个人划空间比较宽敞,其中一人到了对岸还必须把船划回来,不然后面的人就要着急了,一个人过河的时间是自己花费的时间,,两个人同时过桥的时候,花费的时间为两个人中速度最慢的那个人花费的时间,如何设计一个方案,zzd和他的朋友尽快过桥?

Input

输入数据有多组
每组测试数据的第一行是一个整数N(1<=N<=1000)表示共有N个人要过河
每组测试数据的第二行是N个整数Si,表示此人过河所需要花时间。(0<Si<=100)

程序以N=0结束

Output

输出所有人过河的最短时间

Sample Input

4
1 2 5 10
0

Sample Output

17

样例解释:1、2过去,1回来,5、10过去,2回来,1、2过去

 通过两个小的将两个大的运过去。
每次都是最小和次小过去,然后最小回来,然后两个大的过去,次小回来,这样两个大的就过去了,以此类推。
偶数个的话,最后留两个,奇数个的话,最后留三个,手动模拟一下即可。 

solution from zdragon

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[];
  4. int main()
  5. {
  6. int n;
  7. while(~scanf("%d",&n),n)
  8. {
  9. for(int i=;i<n;i++)
  10. scanf("%d",&a[i]);
  11. sort(a,a+n);
  12. int ans=;
  13. if(n&)
  14. {
  15. for(int i=;i<n;i+=)
  16. ans+=a[i]+a[]+*a[];
  17. ans+=a[]+a[]+a[];
  18. }
  19. else
  20. {
  21. for(int i=;i<n;i+=)
  22. ans+=a[i]+a[]+*a[];
  23. ans+=a[];
  24. }
  25. printf("%d\n",ans);
  26. }
  27. return ;
  28. }

3659: 神奇的探险之旅 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 106            Accepted:17

Description

我们正在设计这样的一款儿童探险游戏:游戏由很多故事场景组成,每个场景中都有一个问题,游戏根据玩家的回答将进入下一场景,经过巧妙的设计,我们保证在一次“探险旅行”中,不会重复的进入任何相同的场景,因此最终探险故事将根据玩家的选择结束在某个场景中。玩家总希望能够让自己的探险之旅尽可能的长,给定故事情节布局,请判断最长能够到达多少个场景?
我们对故事的m个场景进行编号(1~m),并且每次都是从编号为1开始探险之旅。

Input

输入数据有多组,每组数据的第一行位一个正整数n,表示数据的组数。
每组数据的第一行为一个正整数m(1<m<1000),表示故事场景的总数,接下来有m行,第i行描述了第i个场景的信息,包括3种情况:
(1)如果该行包含1个正整数j,则表示由第i个故事场景只能到达第j个场景;
(2)如果该行包含2个正整数j和k,则表示由第i个故事场景可以到达第j或者k个场景;
(3)如果该行包含1个字符串“ENDING”,表示故事在第i个场景结束;

Output

每组数据输出格式如下:

Case #x: y

x为测试数据编号,从1开始计算,y为一个整数,表示最多能经过的场景数量。

Sample Input

2
3
2 3
ENDING
ENDING
5
4 5
ENDING
2
3
4

Sample Output

Case #1: 2
Case #2: 5

转化为最短路,负权值跑最短路就是正权值跑最长路

Solution from taozi

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int maxn=;
  5. int T,sum,n,o=,d[maxn];
  6. vector< vector<int> >G(maxn);
  7. int dij()
  8. {
  9. memset(d,,sizeof d);
  10. queue<int>q;
  11. q.push();
  12. while(!q.empty())
  13. {
  14. int u=q.front();q.pop();
  15. for(auto v:G[u])
  16. {
  17. if(d[v]>d[u]-)
  18. {
  19. d[v]=d[u]-;
  20. q.push(v);
  21. }
  22. }
  23. }
  24. return *min_element(d+,d++n)*-;
  25. }
  26. int main()
  27. {
  28. string s;
  29. cin>>T;
  30. while(T--)
  31. {
  32. cin>>n;
  33. cin.get();
  34. for(int i=;i<=n;i++)
  35. {
  36. G[i].clear();
  37. getline(cin,s);
  38. if(s[]=='E')continue;
  39. stringstream ss(s);
  40. while(ss>>sum)G[i].push_back(sum);
  41. }
  42. printf("Case #%d: %d\n",o++,dij()+);
  43. }
  44. return ;
  45. }

5271: 质因数的个数 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 945            Accepted:319

Description

求正整数N(N>1)的质因数的个数。

相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

Input

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。

Output

对于每组数据,输出N的质因数的个数。

Sample Input

Sample Output

Hint

注意:1不是N的质因数;若N为质数,N是N的质因数。

属于这次的友情送温暖题目
相信大家一定也会求其因子数,也是乘法原理x=a1^b1*a2^b2*…(b1 b2…是质数) 因子数为(b1+1)*(b2+1)*….
Solution from zyxxxxxx
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. int t,i,j,n;
  6. while(~scanf("%d",&n))
  7. {
  8. t=;
  9. for(j=; j<=sqrt(n); j++)
  10. {
  11. if(n%j==)
  12. {
  13. while(n%j==)
  14. {
  15. n/=j;
  16. t++;
  17. }
  18. }
  19. }
  20. if(n>) t++;
  21. printf("%d\n",t);
  22. }
  23. }

4859: 分数线划定 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 104            Accepted:60

Description

世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。

【样例说明】

m*150% = 3*150% = 4.5,向下取整后为4。保证4 个人进入面试的分数线为88,但因为88有重分,所以所有成绩大于等于88 的选手都可以进入面试,故最终有5 个人进入面试。

Input

第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。输入数据保证m*150%向下取整后小于等于n。

第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。数据保证选手的报名号各不相同。

Output

第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。

从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

Sample Input

6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88

Sample Output

88 5
1005 95
2390 95
1000 90
1001 88
3239 88

sort就完事

Solution from ljq969309068

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<string>
  4. using namespace std;
  5. struct node
  6. {
  7. int x,y;
  8. } a[];
  9. bool cmp(node s,node d)
  10. {
  11. if(s.y==d.y)
  12. return s.x<d.x;
  13. else
  14. return s.y>d.y;
  15. }
  16. int main()
  17. {
  18. int n,i,j,t,k;
  19. scanf("%d%d",&n,&k);
  20. k=k*1.5;
  21. for(i=; i<n; i++)
  22. {
  23. scanf("%d %d",&a[i].x,&a[i].y);
  24. }
  25. sort(a,a+n,cmp);
  26. int num=k;
  27. while(a[k-].y==a[k].y)
  28. {
  29. k++;
  30. num++;
  31. }
  32. printf("%d %d\n",a[k-].y,num);
  33. for(i=; i<k; i++)
  34. {
  35. printf("%d %d\n",a[i].x,a[i].y);
  36. }
  37. }

4822: 计算系数 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 42            Accepted:14

Description

给定一个多项式(ax + by)k,请求出多项式展开后xnym项的系数。

【数据范围】

对于 30%的数据,有0≤k≤10;

对于 50%的数据,有a = 1,b = 1;

对于 100%的数据,有0≤k≤1,000,0≤n, m≤k,且n + m = k,0≤a,b≤1,000,000。

Input

共一行,包含 5 个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。

Output

输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。

Sample Input

1 1 3 1 2

Sample Output

3

可以组合数,可以DP

Solution from BobHuang (我滚动了一下,卡下空间,学滚动可以到这里)

  1. #include <stdio.h>
  2. #define K 10007
  3. int f[][];
  4. int main()
  5. {
  6. int a,b,n,m,k,i,j;
  7. scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
  8. b%=K,a%=K;
  9. int op=;
  10. f[][]=b,f[][]=a;
  11. for(i=; i<=k; i++)
  12. {
  13. op^=;
  14. for(j=; j<=i&&j<=n; j++)
  15. {
  16. f[op][j]=f[op^][j]*b%K;
  17. if(j) f[op][j]=(f[op][j]+f[op^][j-]*a)%K;
  18. }
  19. }
  20. printf("%d\n",f[op][n]);
  21. return ;
  22. }

Solution from Esquecer

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <iostream>
  7. #include <algorithm>
  8. #include <sstream>
  9. #include <string>
  10. #include <vector>
  11. #include <queue>
  12. #include <stack>
  13. #include <map>
  14. #include <set>
  15. #include <utility>
  16. #include <bitset>
  17. using namespace std;
  18. #define LL long long
  19. #define pb push_back
  20. #define mk make_pair
  21. #define pill pair<int, int>
  22. #define mst(a, b) memset(a, b, sizeof a)
  23. #define REP(i, x, n) for(int i = x; i <= n; ++i)
  24. #define pi acos(-1.0)
  25. #define Max_N 1001
  26. #define INF 2000000000
  27. #define f(i,a,b) for(i = a;i<=b;i++)
  28. #define fi(i,a,b) for(i = a;i>=b;i--)
  29. #define LL long long
  30. using namespace std;
  31. #include<cstdio>
  32. const int N = + ;
  33. const LL MOD = 10007LL;
  34. LL F[N], Finv[N], inv[N];//F是阶乘,Finv是逆元的阶乘
  35. void init()
  36. {
  37. inv[] = ;
  38. for(int i = ; i < N; i ++)
  39. {
  40. inv[i] = (MOD - MOD / i) * 1ll * inv[MOD % i] % MOD;
  41. }
  42. F[] = Finv[] = ;
  43. for(int i = ; i < N; i ++)
  44. {
  45. F[i] = F[i-] * 1ll * i % MOD;
  46. Finv[i] = Finv[i-] * 1ll * inv[i] % MOD;
  47. }
  48. }
  49. LL comb(int n, int m) //comb(n, m)就是C(n, m)
  50. {
  51. if(m < || m > n) return ;
  52. return F[n] * 1ll * Finv[n - m] % MOD * Finv[m] % MOD;
  53. }
  54. LL q(int a,int b)
  55. {
  56. LL ans = ;
  57. LL di = a*1LL;
  58. while(b)
  59. {
  60. if(b&)
  61. ans = (ans * di * 1LL)%MOD;
  62. di = di * di %MOD;
  63. b>>=;
  64. }
  65. return ans%MOD;
  66. }
  67. int main()
  68. {
  69. init();
  70. int a,b,k,n,m;
  71. scanf("%d %d %d %d %d",&a,&b,&k,&n,&m);
  72. cout<<((comb(k,n)*q(a,n))%MOD*q(b,m))%MOD<<endl;
  73. }
  74. /*
  75. 1 1 3 1 2
  76. 332223 133434 888 442 446
  77. */

4507: 构造矩阵 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 96            Accepted:60 Special Judge

Description

给定一个矩阵A,请构造一个对称矩阵B和反对称矩阵C,使得B+C=A。

如果满足MT=M,则称矩阵M为对称矩阵。

如果满足-MT=M,则称矩阵M为反对称矩阵。

MT称为M的转置矩阵。

Input

输入数据的第一行为一个正整数N(N<10),表示矩阵A的行数(或列数)。
接下来有N行,每行N个整数,表示矩阵的元素。

Output

先输出矩阵B,共有N数,每行有N个整数。
接下来输出一个空行。
再输出矩阵B,共有N行,每行有N个整数。

如果有多个结果,只要输出其中一个。
数据保证至少有一个解。

Sample Input

2
2 2
4 4

Sample Output

 

2 3
3 4

0 -1
1 0

比较神奇的构造

Solution from l1401642632

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. int n,j,a[][],i;
  7. cin>>n;
  8. for(i=; i<n; i++)
  9. {
  10. for(j=; j<n; j++)
  11. {
  12. cin>>a[i][j];
  13. }
  14. }
  15. for(i=; i<n; i++)
  16. {
  17. for(j=; j<n; j++)
  18. {
  19. if(j)cout<<" ";
  20. cout<<(a[i][j]+a[j][i])/;
  21. }
  22. cout<<endl;
  23. }
  24. cout<<endl;
  25. for(i=; i<n; i++)
  26. {
  27. for(j=; j<n; j++)
  28. {
  29. if(j)cout<<" ";
  30. cout<<a[i][j]-(a[i][j]+a[j][i])/;
  31. }
  32. cout<<endl;
  33. }
  34. }

3039: 材质贴图 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 50            Accepted:21

Description

3D游戏中的场景经常用材质贴图来表现,例如石头、水面等。
通常,材质贴图是一张正方形的位图,上下边界的像素对应相同,左右边界的像素也对应相同。例如下图中,左边是一张材质贴图,而右边的不是(左右边界不同)。

给定一张n×n的位图,请在这张位图中寻找一块材质贴图,使得材质贴图尺寸最大。下图中黄色区域就是最大的材质贴图,虽然黄色区域左上角2×2的位图也是材质贴图,但不是最大的。

Input

输入包含多组数据。
每组数据第一行是一个整数n (1≤n≤50),表示位图的大小。
然后n行每行n个在0到255之间的整数,描述位图的内容。
输入数据以n=0结束,不要处理这组数据。

Output

对每组数据输出最大的材质贴图的边长。请注意,1×1的位图也是材质贴图。

Sample Input

2
255 0
0 127
5
5 251 127 11 195
23 13 0 13 23
211 0 13 0 67
211 13 0 13 23
1 251 127 11 47
0

Sample Output

 

1
3

往中间走,然后暴力枚举

Solution from BobHuang

  1. #include<stdio.h>
  2. int n,a[][];
  3. int la()
  4. {
  5. for(int k=n; k>; k--)
  6. for(int i=; i<=n-k; i++)
  7. for(int j=; j<=n-k; j++)
  8. {
  9. int f=;
  10. for(int l=; l<k; l++)
  11. if(a[i][j+l]!=a[i+k-][j+l]||a[i+l][j]!=a[i+l][j+k-])
  12. {
  13. f=;
  14. break;
  15. }
  16. if(f)return k;
  17. }
  18. for(int i=; i<=n-; i++)
  19. for(int j=; j<=n-; j++)
  20. {
  21. if(a[i][j]==a[i+][j+]&&a[i+][j]==a[i][j+])
  22. return ;
  23. }
  24. return ;
  25. }
  26. int main()
  27. {
  28. while(scanf("%d",&n),n)
  29. {
  30. for(int i=; i<n; i++)
  31. for(int j=; j<n; j++)
  32. scanf("%d",a[i]+j);
  33. printf("%d\n",la());
  34. }
  35. return ;
  36. }

Solution from Nayo

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int t,a[][],x,y;
  6. while(cin>>t,t)
  7. {
  8. int sme=;
  9. for(int i=; i<t; i++)
  10. {
  11. for(int j=; j<t; j++)
  12. {
  13. cin>>a[i][j];
  14. }
  15. }
  16. for(int i=; i<t; i++)
  17. {
  18. for(int j=; j<t; j++)
  19. {
  20. x=i;
  21. y=j;
  22. x++;
  23. y++;
  24. while(x<t&&y<t)
  25. {
  26.  
  27. if(a[i][j]==a[x][y]&&a[i][j]==a[i][y]&&a[i][j]==a[x][j])
  28. {
  29. //cout<<x-i<<endl;
  30. int flag=;
  31. for(int o=i; o<=x; o++)
  32. {
  33. if(a[o][y]!=a[o][j])
  34. {
  35.  
  36. flag=;
  37. break;
  38. }
  39. }
  40. for(int o=j; o<=y; o++)
  41. {
  42. if(a[i][o]!=a[x][o])
  43. {
  44. flag=;
  45. break;
  46. }
  47. }
  48. if(flag==&&x-i+>sme)
  49. sme=(x-i)+;
  50. }
  51. x++;
  52. y++;
  53. }
  54. }
  55. }
  56. cout<<sme<<endl;
  57. }
  58. }

集训队日常训练20181110 DIV2 题解及AC代码的更多相关文章

  1. 集训队日常训练20181117 DIV2

    大佬们一顿操作猛如虎,拼命AC强啊 4262: 区间异或  Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal ...

  2. 集训队日常训练20181124 DIV2

    急急忙忙要出去比赛就拉了一场有点sb的题目 5202: 网络寻路  时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte总提交: 15            ...

  3. 2018天梯赛第一次训练题解和ac代码

    随着评讲的进行代码和题解会逐步放上来 2018天梯赛第一次训练 1001 : 进制转换 Time Limit(Common/Java):1000MS/10000MS     Memory Limit: ...

  4. 集训队日常训练20181201 E 1005 : 小蝌蚪

    时间限制(普通/Java):500MS/1500MS     内存限制:65536KByte总提交: 25            测试通过:5 描述 有 n 个装着小蝌蚪的水缸排成一排,你拥有一个无限 ...

  5. 2018省赛赛第一次训练题解和ac代码

    第一次就去拉了点思维很神奇的CF题目 2018省赛赛第一次训练 # Origin Title     A CodeForces 607A Chain Reaction     B CodeForces ...

  6. 集训队日常训练20181201 C 1003 : 种类数

    时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte总提交: 8            测试通过:5 描述 一共有 n个数,第 i 个数是 xi ,其中xi  ...

  7. tzcacm去年训练的好题的AC代码及题解

    A - Tree UVA - 548 You are to determine the value of the leaf node in a given binary tree that is th ...

  8. 集训队日常训练20180525-DIV2

    A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...

  9. 集训队日常训练20180525-DIV1

    A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...

随机推荐

  1. java Vamei快速教程08 继承

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...

  2. 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)

    前文描述: 随着.net  推出 MVC框架以来,webform 与 mvc 的争论一直没有停止过,一直以来 mvc 的 拥护者远远高于 webform,但是webfrom的有些优势又是mvc而无法替 ...

  3. [转载]正则表达式参考文档 - Regular Expression Syntax Reference.

    正则表达式参考文档 - Regular Expression Syntax Reference. [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref. ...

  4. UVA1363 - Joseph's Problem(数学,迷之优化)

    题意:给出n和k,1≤n,k≤1e9,计算 切入点是k/i 和 k/(i+1)差距不大.令pi = k/i, ri = k%i.如果pi+1 == pi,那么ri+1 == k - pi(i+1) = ...

  5. UVA Mega Man's Mission(状压dp)

    把消灭了那些机器人作为状态S,预处理出状态S下可以消灭的机器人,转移统计方案.方案数最多16!,要用64bit保存方案. #include<bits/stdc++.h> using nam ...

  6. 【洛谷5390】[Cnoi2019] 数学作业(位运算)

    点此看题面 大致题意: 给你一个集合,求所有子集异或和之和. 大致思路 首先,我们很容易想到去对二进制下每一位分别讨论. 枚举当前位,并设共有\(x\)个数当前位上为\(1\),则有\((n-x)\) ...

  7. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  8. PostgreSql的使用

    title: PostgreSql的使用 tags: PostgreSql --- PostgreSql官网: https://www.postgresql.org/ 1 PostgreSql的安装 ...

  9. Drupal忘记管理员密码

    第一步:登陆录到phpmyadmin(通用的mysql数据库管理工具),进入phpmyadmin后,找到与drupal7相关联数据库并在数据库中找到一张名为“users”的表,然后选择浏览. 第二步: ...

  10. 第17题:打印1到最大的n位数

    面试题17:打印1到最大的n位数  题目:输入数字n,按顺序打印出从1最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数即999. 考点: 用字符串或者数组表达一个大数. 思路 1. ...