CF #April Fools Day Contest 2016 E Out of Controls

题目连接:http://codeforces.com/problemset/problem/656/E

愚人节专场的E,整个其实就是个Floyd算法,但是要求代码中不能包含

define
do
for
foreach
while
repeat
until
if
then
else
elif
elsif
elseif
case
switch

这些关键词。

如果不考虑屏蔽define,很容易想到将代码中用到的关键词全部define成其它不在列表中的词。但是define的时候还是得要写出原来的关键词,况且define也被屏蔽了,有一种方法是利用将代码分行。

于是C++代码解决这道问题就成了如下所示

 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 #include <string>
 5 #include <string.h>
 6 #include <stdio.h>
 7 #include <math.h>
 8 #include <queue>
 9 #include <stack>
10 #include <map>
11 #include <ctime>
12 #include <set>
13 using namespace std;
14 const int N=12;
15 #def
16 ine foo fo
17 r
18 int g[N][N];
19 int dis[N][N];
20 void floyd(int n) {
21     memcpy(dis,g,sizeof g);
22     foo (int k=1; k<=n; k++){
23         foo (int i=1; i<=n; i++){
24             foo (int j=1; j<=n; j++) {
25                 dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
26             }
27         }
28     }
29 }
30 int main () {
31     int n;
32     cin>>n;
33     foo (int i=1;i<=n;i++) {
34         foo (int j=1;j<=n;j++) {
35             cin>>g[i][j];
36         }
37     }
38     floyd(n);
39     int ret=0;
40     foo (int i=1;i<=n;i++) {
41         foo (int j=1;j<=n;j++) {
42             ret=max(ret,dis[i][j]);
43         }
44     }
45     cout<<ret<<endl;
46     return 0;
47 }
View Code

其实也可以直接写一个程序,生成代码(IO以及Floyd),但是没有上面的用分行显得雅观。

除了C++也有很多语言也可以有办法做此题。还看到有人用PHP的解码来做,可惜我不懂PHP。

原文地址:https://www.cnblogs.com/micrari/p/5374038.html