[C con Clase] Duda en código
Programante
programante en gmail.com
Sab Jul 25 23:52:21 CEST 2009
Nicolás Figueroa Ramírez escribió:
> Revisando algunos codigos en internet, para profundizar un poco el
> lenguaje (C y C++) me tope con esto
>
> int T, n, ans;
> int A[5000], B[5000], C[5000], H[10001], V[10001];
>
>
>
> int main() {
> cin>>T;
> for (int t=1; t<=T; t++) {
> cin>>n;
> for(int i=0; i<n; ++i) cin>>A[i]>>B[i]>>C[i];
>
> int ans = 0;
> for (int CC=0; CC<=10000; ++CC) {
>
>
> memset(H, 0, sizeof(H));
> memset(V, 0, sizeof(V));
> for (int i=0; i<n; ++i)
> if (C[i]<=CC && A[i]+B[i]+CC<=10000)
> { V[A[i]]++; H[B[i]]++; }
> int Q = 0;
>
>
> for (int AA=-1; AA<10000-CC; ++AA) {
> Q = Q + V[AA+1] - H[10000-CC-AA];
> *ans >?= Q;*
>
>
> }
> }
>
> cout<<"Case #"<<t<<": "<<ans<<endl;
> }
> return 0;
> }
>
> Y no logre entender que significa la linea resaltada (el resto lo
> entiendo), alguien me podria ayudar?
Es curioso. No conocía esa construcción. Aunque está claro que pertenece
al C++ (si bien no al C) puesto que compila bien.
Viendo el código que genera parece ser equivalente a:
if (ans >= Q)
ans = ans;
else
ans = Q;
Así que vendría a ser un operador para "obtener el máximo". Podría
leerse como 'asignar si mayor'.
El opuesto **ans <?= Q;** también funciona.
Más información sobre la lista de distribución Cconclase