训练一 题解

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

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

1.

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

两种情况:

1.juuly july2.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 1000010
int 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。。。

时间: 2024-10-07 02:28:56

训练一 题解的相关文章

周一训练赛题解

这次完全是水题大集合啊,希望大家A的开心: 前两个题是我找的,后两个是陶叔找的,另外因为我的偷懒,下面所有的代码都是陶叔亲自写的,十分感谢陶叔: 陶叔暑假为了大家的集训,牺牲了很多自己宝贵的时间,大家接下来要好好训练啊!!!! 废话少说,进入正题: Problem A      SPOJ QUEST5 签到题: 将所有的边按照右端点排个序,然后每次选择没有钉住的点,然后把这之后的所有与它相交的边全去掉: 代码: #include <cstdio> #include <cstring>

训练赛题解

突然想到好久以前做完这份题目没写题解.蛮来写写吧.很多细节已经忘记了.. 第一题 很简单的字符串比对是否b包含a.不包含就报NO,包含就YES..坑爹的第一次!!.把strlen放在了for循环里面..就超时了..超时了.. 注意:for里面的条件每次也会重新计算. A - All in All Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Status Practice P

第三周训练赛题解

这次题目加强了搜索的练习,还有一些小技巧和基本方法,加了一道基础DP居然没人A确实是意料之外,C题的裸DFS也是很迷.蓝桥杯以爆搜为主,近期会加强搜索训练,做好准备. A: 给定一个整数n,将1~n排列成环使两两之间互质. DFS搜索所有可能的排列,输出. B: 问能否在恰好的时间从S->D 题目运用到了奇偶剪枝的方法, 根据题目,doggie必须在第t秒到达门口.也就是需要走t-1步.设doggie开始的位置为(sx,sy),目标位置为(ex,ey).如果abs(ex-x)+abs(ey-y)

cumt训练赛题解

2017年4月3日 cumt2017春季--训练赛(1) A.HihoCoder 1339 (dp) 思路: 比较清晰呢,就是个dp吧.定义一下状态,dp[i][j]:前i个骰子,扔出点数和为j的方案数.然后不就很好写了嘛递推式,dp[i][j] = dp[i - 1][j - k](1<=k<=6). 好像题就做完了诶,可是窝wa了两发什么鬼.第一发爆int,第二发爆longlong,这里的trick就是方案数可能非常大,所以这题的应该把状态定义为dp[i][j]:前i个骰子,扔出点数和为j

2015多校训练5题解与代码

首先呢,要废话一段..这场是见过的所有多校中最最亲民的.因为英文题面都很短.但是是最考验智商的一次(除去那个化学第一电离能)... 赛后补题在题解和各大巨巨的帮助下能够补到7题也是醉了.说明题就是考模型建立,没有考到多深的知识点. 戳我见官方题解 1002:HDOJ 5344 第一眼看上去就是亦或啊,又是数学啊,又是不能暴力的.the xor of all (Ai+Aj)(1≤i,j≤n)这是关键句.根据题意把需要的写出来,发现所有i!=j的,都可以利用a^a=0消除,所有只剩下i==j的.最后

常州大学新生寒假训练会试 题解

[题目链接] A - 添加逗号 注意是从后往前三个三个加逗号,最前面不允许有逗号 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; char s[maxn]; char ans[maxn]; int sz; int main() { scanf("%s", s); int len = strlen(s); sz = 0; int t = 0; for(int i = len -

FJUT2017寒假训练二题解

A题 题意:让你找出唯一的一个四位数,满足对话时的要求. 思路:因为是4位数,可以直接从1000-9999遍历一遍,判断是否有唯一的数能满足所有条件,如果不是唯一的或者没有满足条件的数就输出Not sure.特别丑的代码附上... 1 #include<stdio.h> 2 int a[10000],b[10000],c[10000]; 3 int main() 4 { 5 int n; 6 while(~scanf("%d",&n)) 7 { 8 if(n==0)

2018.12.2 中国石油大学第一次新生训练赛题解

整理人: 周翔 A题:李继朋 B题:李继朋 H题:魏斯博 原文地址:https://www.cnblogs.com/QLU-ACM/p/10057831.html

哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练. 题解: E666 这个题是让求有多少个子串只含有6.寻找连续的6,然后用n*(n+1)/2求出这一段的子串个数,然后把每一段连续的加起来. 做的时候wa了很多次,原来是在n*(n+1)的地方已经超过int型了,所以需要设置类型为long long. #include <cstdio> #inc