diakla

导航

攻防世界 Railfence【W形栅栏】

题中提到了栅栏那就是栅栏密码,但是普通的栅栏并不对,所以试一下W形

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int main()
{
	string s;
	int a[105],d[105];
	char b[105][105];
	cin>>s;
	int n=s.length();
	for(int c=2;c<=n;c++)
	{
		memset(a,0,sizeof(a));
		int w=0;
		while(w<n)
		{
			for(int i=1;i<c&&w<n;i++,w++)
				a[i]++;
			for(int i=c;i>1&&w<n;i--,w++)
				a[i]++;
		}
		w=0;
		for(int i=1;i<=c;i++)
			for(int j=1;j<=a[i];j++)
				b[i][j]=s[w++];
		memset(d,0,sizeof(d));
		w=0;
		while(w<n)
		{
			for(int i=1;i<c&&w<n;i++,w++)
				cout<<b[i][++d[i]];
			for(int i=c;i>1&&w<n;i--,w++)
				cout<<b[i][++d[i]];
		}
		puts("");
	}
	return 0;
}

flag:cyberpeace{railfence_cipher_gogogo}

posted on 2020-12-07 19:57  diakla  阅读(300)  评论(0)    收藏  举报