论这道题的数据有多弱
查看原帖
论这道题的数据有多弱
48785
Hanabi_BNUAZ楼主2021/4/6 21:16
这是我过了第一次以后抱着水题(不是) 的心态写的代码,居然通过了,是玩玩没想到啊,有感而发,再次水贴一发。先上我写的代码 (极丑无比)
#include<bits/stdc++.h>
using namespace std;
char s[1005];
int number[10],l;
inline int min(int a,int b) { return a<b?a:b; }
inline int num(int i)
{
	switch (s[i])
	{
		case 'a': 
			if ((s[i+1]==' ') || (s[i+2]=='o')) return 1;
			else return 0;
		case 'b': 
			if (s[i+1]=='o') return 2;
			else return 0;
		case 'e':
			if ((s[i+1]=='i') && (s[min(l-1,i+5)]=='e')) return 18;
			else if (s[i+1]=='i') return 8;
			else if (s[i+1]=='l') return 11;
			else return 0;
		case 'f':
			if (s[i+2]=='r') return 1;
			else if ((s[i+1]=='o') && (s[min(l-1,i+4)]=='t')) return 14;
			else if (s[i+1]=='o') return 4;
			else if (s[min(l-1,i+3)]=='t') return 15;
			else if (s[i+2]=='v') return 5;
			else return 0;
		case 'n':
			if (s[min(l-1,i+4)]=='t') return 19;
			else if (s[i+2]=='i') return 9;
			else return 0;
		case 'o':
			if (s[i+1]=='n') return 1;
			else return 0;
		case 's':
			if ((s[i+1]=='e') && (s[min(l-1,i+5)]=='t')) return 17;
			else if (s[i+2]=='c') return 2;
			else if (s[i+1]=='e') return 7;
			else if ((s[i+1]=='i') && (s[min(l-1,i+3)]=='t')) return 16;
			else if (s[i+2]=='x') return 6;
			else return 0;
		case 't': 
			if (s[i+2]=='n') return 10;
			else if (s[min(i+4,l-1)]=='d') return 3;
			else if (s[i+2]=='i') return 13;
			else if (s[i+2]=='r') return 3;
			else if (s[i+2]=='o') return 2;
			else if (s[i+4]=='v') return 12;
			else if (s[i+1]=='w') return 20;
			else if (s[i+3]=='e') return 3;
			else return 0;
		default:
			return 0; 
	}
}
int main()
{
	int sum=0,flag=0;
	gets(s);
	for (int i=strlen(s);i;--i)
		s[i]=s[i-1];
	s[0]=' ';
	s[1]=tolower(s[1]);
	l=strlen(s);
	for (int i=0;i<=l-1;++i) if (s[i]==' ') number[sum++]=(int)(num(i+1)*num(i+1))%100;
	sort(number,number+sum);
	for (int i=0;i<sum;++i) 
		if (number[i]) 
		{
			if ((number[i]<10) && (flag)) printf("0"); 
			flag=1;
			printf("%d",number[i]);
		}
	if (!(flag)) printf("0\n");
	return 0;
}

这是我的程序部分。不难发现,这道题目的数据已经弱到连这种代码都能通过了;
以下是我随便编造的一组hack的数据,数据hack的点主要针对程序中判断数数字的num子函数代码:
input:
Worcher's data terrors me a lot.


theoretical output:
1
actual output:
109
不难发现,这里这里输出结果应该是1,但是这道可以AC过的题目输出数据居然是109;

由此,强烈建议把数据点稍微改多一点,或者把数据点设置难一点

2021/4/6 21:16
加载中...