首页 > 代码库 > 训练一 题解

训练一 题解

最近整个人都不太好冏,,这样的题卡成这样。。。可以去死了。。弱成翔了。。。

本人水平太渣,,若各位大神 有更好的算法,求分享。

1.

先找出不同的位置,然后搞

两种情况:

1.juuly july
2.aba ab

胡乱搞搞就好冏
贴代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cstdlib>#include<string>#include<queue>#include<vector>#include<set>using namespace std;#define N 1000010int t,len1,len2,sum;char s1[N],s2[N];int main(){	scanf("%d",&t);	while(t--)	{		int i=0,j=0,p=0,cnt=0;		scanf("%s%s",s1,s2);		len1=strlen(s1);		len2=len1-1;		while(i<len1&&j<len2)		{			if(s1[i]!=s2[j])			{				p=i;				cnt++;				if(cnt>1)				break;				i++;			}			else			i++,j++;		}		if(cnt>1)			printf("0\n");		sum=0;		if(cnt==0)		{			for(i=len1-2;i>=0;i--)			{					if(s1[i]==s1[len1-1])						sum++;					else						break;			}			printf("%d\n",sum+1);			for(j=i+2;j<=len1-1;j++)				printf("%d ",j);			printf("%d\n",len1);		}		else if(cnt==1)		{			for(i=p-1;i>=0;i--)			{				if(s1[i]==s1[p])					sum++;				else 					break;			}			printf("%d\n",sum+1);			for(j=i+2;j<=p;j++)				printf("%d ",j);			printf("%d\n",p+1);		}	}	return 0;}

  2.扫了一眼,博弈不太会搞,推了推,原来是斐波那契亚数列。。。写了个判断挂了,,,果断打表QAQ!!!查找用到set,,,自行百度,c++中的STL

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<cstdlib>#include<algorithm>#include<queue>#include<vector>#include<set> using namespace std;long long f[50]={1,1};int main(){    int n;    set<long long>s;    s.insert(1);    for(int i=2;i<50;++i)    {        f[i]=f[i-1]+f[i-2];        s.insert(f[i]);    }    int t;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        if(s.find(n)!=s.end())            puts("Alice!");        else puts("Bob!");    }}

  

      3.显然取中点,自己动手模拟下= =

  代码:

#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<cmath>#include<cstdlib>#include<algorithm> #include<queue>#include<vector>using namespace std;int t,n,k;long long a[100010],sum;bool cmp(int x,int y){    return x<y;}int main(){    scanf("%d",&t);    while(t--)    {        sum=0;        scanf("%d",&n);        for(int i=1;i<=n;i++)            scanf("%lld",&a[i]);        sort(a+1,a+1+n,cmp);        if(n%2==1)            k=a[(n+1)/2];        else            k=a[n/2];        for(int i=1;i<=n;i++)            sum+=abs(a[i]-k);        printf("%lld\n",sum);    }    return 0;}

  4.额,,读一个数,读一个字符。。找出*的,不用管加号,最后扫一遍累加就好了= =,,,特么 在读入 上纠结 冏,,,真是弱爆了。。。。。。。。

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<cstdlib>#include<algorithm>#include<queue>#include<vector>#include<iostream>using namespace std;long long num[100000];char s[100000];long long i;int t;int main(){  scanf("%d",&t);    while(t--){      memset(num,0,sizeof(num));      cin>>num[1];      long long l=1,ans=0;      while(scanf("%c",&s[l]))      {          if (s[l]==‘\n‘) break;          l++;          cin>>num[l];          num[l]%=10000;      }      l--;      for(i=1;i<=l;i++)      if(s[i]==‘*‘)      {            num[i+1]=num[i]*num[i+1];            num[i]=0;            num[i+1]%=10000;       }      for(i=1;i<=l+1;i++)ans+=num[i];      cout<<ans%10000<<endl;    }    return 0;}

  5.高精度乘法,直接上模板,,找个好的模板真费劲,以后 要自己好好弄模板冏= = 

#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<cmath>#include<cstdlib>#include<algorithm> #include<queue>#include<vector>#include<stdio.h>#include<string.h>void choose(char q[]){    int i,ll;    char tmp;    ll=strlen(q);    for(i=0;i<ll/2;i++)    {        tmp=q[i];q[i]=q[ll-i-1];q[ll-i-1]=tmp;    }}void fun(char a[],char b[],char c[],int n){    int i,j,jinw=0,x,y,z;    int l1,l2,l3;    choose(a);    choose(b);    l1=strlen(a);    l2=strlen(b);    for(i=0;i<=l1+l2;i++)    c[i]=0;    for(i=0;i<l2;i++)    {        for(j=0;j<l1;j++)        {            x=b[i]-‘0‘;            y=a[j]-‘0‘;            z=x*y;            if(jinw)                z+=jinw;            if(z>9)            {                jinw=z/10;                z%=10;            }            else                jinw=0;            c[i+j]+=z;        }    }    if(jinw)    {        for(i=0;i<l1+l2-1;i++)            c[i]+=‘0‘;        c[l1+l2-1]+=jinw+‘0‘;    }    else    {        for(i=0;i<l1+l2-1;i++)            c[i]+=‘0‘;    }    for(i=0;i<strlen(c);i++)    {        if(c[i]>‘9‘)            {                c[i]-=‘0‘;                jinw=c[i]/10;                c[i]%=10;                c[i]+=‘0‘;                c[i+1]+=jinw;            }    }    l3=strlen(c);    c[l3]=‘\0‘;    printf("Case %d:\n",n);    for(i=l1-1;i>=0;i--)        printf("%c",a[i]);    printf(" * ");    for(i=l2-1;i>=0;i--)        printf("%c",b[i]);    printf(" = ");    for(i=strlen(c)-1;i>=0;i--)        printf("%c",c[i]);    printf("\n\n");}int main(){    int n,m;    char a[200],b[200],c[2000];    while(scanf("%d",&n)!=EOF)    {        m=n;        while(n--)        {            scanf("%s%s",a,b);            fun(a,b,c,m-n);        }    }    return 0;}

  

多想想,多想想,多想想。

一直饿着肚子,冏。。。写完去吃饭了QAQ。。。

 

训练一 题解