Codeforces 1243A
Posted commario
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1243A相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include <string.h> int num[1024]; int main() { int k; int n; int temp; scanf("%d", &k); while(k--) { memset(num, 0, sizeof(int)*1024); scanf("%d", &n); int i; int max=1; for(i=0; i<n; ++i) { scanf("%d", &temp); int j; for(j=1; j<=temp; ++j) ++num[j]; } for(i=1; i<=n; ++i) { //printf("num[%d]=%d ", i, num[i]); if(num[i]>=i) max=i; } printf("%d ", max); } return 0; }
@这道题由于矩形的宽度都为1个单位,因此每组输入数据所能构成最大正方形的边长取决于这组数据中矩形的高度。具体步骤:在录入数据时,将每个矩形的高度作为数组下标,并将所有小于等于此高度的数组下标内数组元素做加1运算,这样做不仅能计算出大于或等于每种矩形高度的个数,而且还对高度进行了从1到n的升序处理。数据录入结束后,从数组下标为1处开始访问num数组,依次检查每个数组下标所对应的数组元素是否大于或等于该下标的值,若满足则将此数组下标存入变量max中。最终变量max中的结果即为这组数据所能构成的最大正方形边长。
以上是关于Codeforces 1243A的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 86C Genetic engineering(AC自动机+DP)
CodeForces 1005D Polycarp and Div 3(思维贪心dp)
(Incomplete) Codeforces 394 (Div 2 only)