hello Every one ! i solved this problem https://mirror.codeforces.com/problemset/problem/785/A using c11 and after i solved the problem i saw others submissions to check if some one have a better solution and so i found a submission i cannot understand can some one please help , this is it :
#include <stdio.h>
int t, n;
main()
{
scanf("%d\n", &n);
while (n--) {
char s[9];
gets(s);
t += "4!8D6<"[*s%7]-48; // this the line i cannot understand
}
printf("%d\n", t);
}
and that was my submission :
#include<stdio.h>
int main()
{
int a,i=0,c=0;
scanf("%d",&a);
char b[13];
gets(b);
for(i=0;i<a;i++)
{
gets(b);
c+=( b[0]=='I'?20:b[0]=='C'?6:b[0]=='O'?8:b[0]=='D'?12:4 );
}
printf("%d",c);
}
"string-literal"[index]
is the character of the"string-literal"
at positionindex
, nothing fancy here.Other than that, a character can be used as its ASCII code.
So, when used as numbers,
"4!8D6<"
is short for{52, 33, 56, 68, 54, 60}
.Similarly,
*s%7
is the ASCII code of the first character of the respective string modulo 7.As an example, when
s = "Tetrahedron"
, the code of*s = s[0] = 'T'
is 84, and84 % 7 = 0
.So the answer is
{52, 33, 56, 68, 54, 60}[84 % 7] - 48 = 4
.thank you a lot , appreciate it a lot