另类编程挑战赛Time Limit Exceeded(http://felicity.iiit.ac.in/tle/),这个比赛的得分算法很另类,它将根据你代码的总长度和特定字符的多少而定。在刚刚结束的测试赛中,有几个题目非常具有挑战性,参赛者提交的代码也是牛气冲天。
Power of 2
问题:
输入数据含有多行,每行一个正整数。对每个数,检查看它是否是2的幂,是则输出yes,不是则输出no。
你的程序不允许使用分号。
规定0也是2的幂。
得分:
S= length of code + number of whitespaces;
score = (250000)/(S^2);
样例输入:
2
3
4
5
0
样例输出:
yes
no
yes
no
yes
目前的最好结果为76分:
main(t){while(~scanf("%d",&t)&&puts(t&t-1?"no":"yes")){}}
Count 1 2 3
问题:
写一个程序,该程序运行后打印出从1到50 000的整数。
你不允许使用循环语句和跳转语句(for、while、goto)。
你不允许使用#define 。
得分:
S= length of code – number of whitespaces;
score = 11 + (500*400)/(S^2);
目前的最好结果为124分,仔细体会这段代码,非常的牛:
n;main(){n<5e4&&main(printf("%dn",++n));}
Segmentation Fault
问题:
写一个程序,该程序运行后打印出从1到5 000 000的整数。
你不允许使用循环语句和跳转语句(for、while、goto)。
你不允许使用#define 。
得分:
S= length of code - numer of whitespaces;
score = 51 + (500*1600)/(S^2);
这道题和上道题的区别就是:不加改进的递归会导致堆栈溢出。
目前的最好结果为234分,仔细观察这段代码,看他是怎样避免堆栈溢出的:
j;main(i){i>1e5||printf("%dn",++j)+main(i+1);i<2&j<5e6&&main(1);}