I do the following:
- Precompute all fibonacci numbers up to fib(46).
- For each character of cypher, if is apha, then look for its correct position
in the output string.
- Output string.
But i am getting WA.
Thanks in advance.
Code: Select all
ACC
Moderator: Board moderators
Code: Select all
ACC
Code: Select all
Note that only uppercase letters conveys the message; other characters are simply garbage.
Code: Select all
if(isalpha(line[k])
Code: Select all
if(isupper(line[k]))
Code: Select all
3
2 3 1
ABCDEFG
Code: Select all
CAB
Code: Select all
while(out[i] == ' ') i++;
Code: Select all
Got Ac!
Code: Select all
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <assert.h>
using namespace std;
int fib[47];
int fibind(int n){
int left = 1;
int right = 45;
int mid;
while(left<right){
mid=(left+right)/2;
if(fib[mid]==n)return mid;
else if(fib[mid]<n)left=mid+1;
else right=mid-1;
}
return left;
}
int main (void){
int i;
fib[0]=fib[1]=1;
for(i=2;i<=46;++i){fib[i]=fib[i-1]+fib[i-2];}
char s[200], buff[1000];
char *p;
int c[200], T, N, k, mxpos;
//freopen("input.txt","r",stdin);
gets(buff);
sscanf(buff,"%d",&T);
while(T--){
gets(buff);
sscanf(buff,"%d",&N);
gets(buff);
for(i=0,p=strtok(buff," ");i<N;++i,p=strtok(NULL," ")){
sscanf(p,"%d",&c[i]);
}
for(i=0;i<200;++i)s[i]=' ';s[i]='\0';
gets(buff);
int len = strlen(buff), pos;
k=0;mxpos=0;
for(i=0;i<len && k<N;++i){
if(buff[i]>='A' && buff[i]<='Z'){
pos = fibind(c[k]);
s[pos-1]=buff[i];
if(pos>mxpos)mxpos=pos;
k++;
}
}
s[mxpos]='\0';
printf("%s\n",s);
}
return 0;
}
Code: Select all
#include<stdio.h>
#include<string.h>
int main()
{
long long a,b,c,i,d=0;
a=0;
b=1;
long long flist[60];
for(i=0;;i++){
c=a+b;
//printf("c=%d\n",c);
flist[d]=c;
if(d==50)
{
break;
}
d++;
b=a;
a=c;
}
long long t1;
scanf("%lld",&t1);
for(i=0;i<t1;i++)
{
long long t2,j=0,ni,k=0,count=0,length=0,len=0,m=0;
long long numlist[500];
char str1[110],str2[110];
scanf("%lld",&t2);
for(j=0;j<t2;j++)
{
scanf("%lld",&ni);
numlist[j]=ni;
}
scanf(" %[^\n]",&str1);
len=strlen(str1);
for(k=0;k<len;k++)
{
if((str1[k]>=65)&&(str1[k]<=90))
{ str2[m]=str1[k];
m++;
}
}
j=0,k=0;
char os[110];
for(j=0;j<m;j++)
{
for(k=1;k<50;k++)
{
if(numlist[j]==flist[k])
{
os[k-1]=str2[count];
count++;
length++;
break;
}
}
}
j=0;
for(j=0;;j++)
{
if(j==length)
{
break;
}
if((os[j]>=65)&&(os[j]<=122))
{
printf("%c",os[j]);
os[j]='\0';
}
else
{
printf(" ");
length=length+1;
}
}
printf("\n");
}
return 0;
}
Code: Select all
char os[110];
Code: Select all
char os[110] = {0};
Acc.