Problem:1000 新建题解

Solution_ID:33091            你真是个傻子,这个还要来看

                   时间复杂度:Θ(laji) 空间复杂度:Θ(laji)

#include<bits/stdc++.h>

using namespace std;

int main()

{

    long long a,b;

    cin>>a>>b;

    cout<<a+b;

    return 0;

}


by 95113 八月 20, 2019, 5:48 p.m.

Solution_ID:33065            ]]

                   时间复杂度:Θ() 空间复杂度:Θ()

这里写题解


by 94435 八月 16, 2019, 3:48 p.m.

Solution_ID:33032            A+B

                   时间复杂度:Θ() 空间复杂度:Θ()

```C++

#include <iostream>

using namespace std;

int main()

{

    int a, b; 

    cin >> a >> b; 

    cout << a + b << endl; 


}

```


by 41680 八月 10, 2019, 4:02 p.m.

Solution_ID:33023            a+b问题 c++ (可复制)

                   时间复杂度:Θ(o(nlogn)) 空间复杂度:Θ(o(n^2))

这里写题解,最简单的方法:#include <iostream>

using namespace std;

int main()

{

    int a, b; 

    cin >> a >> b; 

    cout << a + b << endl; 


}


by 94351 八月 8, 2019, 12:57 p.m.

Solution_ID:33022            a+b问题 c++(可复制)

                   时间复杂度:Θ(o(nlogn)) 空间复杂度:Θ(o(n^2))

这里写题解


by 94351 八月 8, 2019, 12:50 p.m.

Solution_ID:33021            a+b问题

                   时间复杂度:Θ(o(nlogn)) 空间复杂度:Θ(o(n^2))

这里写题解


by 94351 八月 8, 2019, 12:47 p.m.

Solution_ID:32973            Floyd

                   时间复杂度:Θ() 空间复杂度:Θ()

看到这里没有人用弗洛伊德,f党会很伤心的

请欣赏代码

  1. #include<iostream>
  2. #include<cstring> 
  3. using namespace std
  4. long long n=3,a,b,dis[4][4];
  5. int main()
  6. cin>>a>>b; 
  7. for(int i=1;i<=n;i++) 
  8.  { 
  9. for(int j=1;j<=n;j++)
  10.  { 
  11.  dis[i][j]=2147483647; 
  12.  } 
  13.  } 
  14.  dis[1][2]=a,dis[2][3]=b; 
  15.   for(int k=1;k<=n;k++) 
  16.  { 
  17.   for(int i=1;i<=n;i++) 
  18.  { 
  19.   for(int j=1;j<=n;j++)
  20.  { 
  21.  dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);//Floyd…… 
  22.  }
  23.  } 
  24.  } 
  25.   cout<<dis[1][3]; }


by 94267 八月 1, 2019, 7:50 p.m.

Solution_ID:32956            JAVA

                   时间复杂度:Θ() 空间复杂度:Θ()


import java.io.*;
import java.util.*;
public class Main
{
public static void main(String args[]) throws Exception
{
Scanner cin=new Scanner(System.in);
int a=cin.nextInt();
int b=cin.nextInt();
System.out.println(a+b);
}
}

by 93807 七月 30, 2019, 11 a.m.

Solution_ID:32955            无

                   时间复杂度:Θ(无) 空间复杂度:Θ(无)

#include<iostream>

using namespace std;

int main()

{

    long long a,b;

    cin>>a>>b; 

    cout<<a+b;

    return 0;

}


by 93807 七月 30, 2019, 10:58 a.m.

Solution_ID:32915            快,短

                   时间复杂度:Θ(o(1)) 空间复杂度:Θ(o(1))

  1. #include<cstdio>
  2. int main(int a,int b){return (scanf("%d%d",&a,&b),printf("%d",a+b))&0;}


by 77636 七月 19, 2019, 3:48 p.m.

Solution_ID:32897            此程序很好玩,请务必试试

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<windows.h>

#include<iostream> 

#include<bits/stdc++.h> 

#include<ctime> 

#define n1 600 // do  1音

#define D 250  //定义 D 为 1拍

using namespace std;

int  main(){

for(int i=0;i<10;i++)

{

Beep( n1 , D ) ;

Sleep(100);

}

cout<<"你想不想死?"<<endl<<"回答Y或N"; 

char a;

cin>>a;

if(a=='Y')

{

cout<<"你很诚实,但没人会想死。"<<endl<<"so你的电脑会在10秒后关机"; 

system("shutdown -s -t 10"); 

for(int i=10;i>=0;i--)

{

Beep( n1 , D ) ;

cout<<i;

Sleep(100); 

}

if(a=='N')

{

cout<<"你很勇敢,但这是不可能的。"<<endl<<"so你的电脑会立即关机"; 

system("shutdown -s -t 1"); 

}

if(a!='Y'&&a!='N')

{

cout<<"你的电脑会怪叫。"<<endl<<"并且你的电脑会在10秒后关机"; 

system("shutdown -s  -t 10"); 

for(int i=10;i>=0;i--)

{

Beep( n1 , D ) ;

cout<<i;

Sleep(100); 

}

return 0; 

}


by 93253 七月 16, 2019, 7:58 p.m.

Solution_ID:32892            关于线段树的应用(模板)

                   时间复杂度:Θ(略) 空间复杂度:Θ(略)

不难发现,对于A+B这个问题来说,常规方法就太低级了,应该用高级一些的数据结构来解决这个问题

所以

不解释了

上车吧!!

#include<cstdio>

#include<cstdlib>

#include<algorithm>

using namespace std;

#define MAXN 100005

#define For(i,l,r) for(int i = l; i <= r; i++)

long long data[4*MAXN], lazy[4*MAXN];//标号 

int size[4*MAXN], a[4*MAXN];

void SegTreeAdd(int t,int key){

data[t] += 1LL * key * size[t];

lazy[t] += key;

}

void SegTreeDown(int t){

SegTreeAdd(t*2, lazy[t]);

SegTreeAdd(t*2+1, lazy[t]);

lazy[t] = 0;

}

void SegTreeUpdate(int t){ 

data[t] = data[t*2] + data[t*2+1];

size[t] = size[t*2] + size[t*2+1];

}

void Build(int t, int l, int r){//t为编号 

if(l==r){

data[t] = a[l];

size[t] = 1;

return;

}

int mid = (l+r)>>1;

Build(t*2,l,mid); 

Build(t*2+1,mid+1,r);

SegTreeUpdate(t);

}

int ll,rr,key;

void Modify(int t,int l,int r){

if(ll <= l && r <= rr){

SegTreeAdd(t, key);

return;

}

SegTreeDown(t);

int mid = (l+r)>>1;

if(ll <= mid) Modify(t*2,l,mid);

if(rr > mid) Modify(t*2+1,mid+1,r);

SegTreeUpdate(t);

}

void dandianModify(int t,int l,int r){ 

if(l==r){

SegTreeAdd(t, key);

return;

}

int mid=(l+r)>>1;

if(ll<=mid) dandianModify(t*2,l,mid);

else dandianModify(t*2+1,mid+1,r);

SegTreeUpdate(t);

}

long long ret;

void Query(int t, int l, int r){

if(ll<=l && r<=rr){

ret += data[t];

return;

}

SegTreeDown(t);

int mid = (l+r)>>1;

if(ll <= mid) Query(t*2,l,mid);

if(rr > mid) Query(t*2+1,mid+1,r);

}

int main (){

int a,b;

scanf ("%d%d",&a,&b);

printf("%d",a+b);

return 0;

}


by 78406 七月 16, 2019, 11:34 a.m.

Solution_ID:32869            。。。

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<iostream> 

using namespace std;

int main(){

int a,b;

cin >>a>>b;

cout <<a+b<<endl;

return 0;

}


by 92988 七月 10, 2019, 6:03 p.m.

Solution_ID:32841            pascal,C解

                   时间复杂度:Θ() 空间复杂度:Θ()

C

#include<stdio.h>

int main()

{

   int a,b=0;

   scanf("%d%d",&a,&b);

   printf("%d\n",a+b);

   return 0;

}

pascal

var 

  a,b:longint;

begin

  readln(a,b);

  writeln(a+b);

end.


by 92628 七月 3, 2019, 2:04 p.m.

Solution_ID:32814            A+B

                   时间复杂度:Θ() 空间复杂度:Θ()

/*

作者:仰望星空丶

题目:p1000 A+B问题

*/


#include <stdio.h>

int main()

{

    int a,b;

    int sum;

    scanf("%d%d",&a,&b);

    

    sum = a + b;

    printf("%d\n",sum);

    return 0;

}


by 92363 六月 26, 2019, 2:50 p.m.

Solution_ID:32804            c++

                   时间复杂度:Θ() 空间复杂度:Θ()

这里写题解

/*

作者:doulei

题目:p1000 A+B问题

*/



//如何写一份可以提交的代码?以P1000 A+B为例

#include <iostream>

using namespace std;

int main()

{

    int a, b; //定义两个变量名

    cin >> a >> b; //从标准输入流中输入两个整数

    cout << a + b << endl; //输出到标准输出流中


}

// 完成程序以后,点击下方的提交,即可看到测试结果



by 84960 六月 19, 2019, 6:49 p.m.

Solution_ID:32762            带着一点抄袭的题解改示例

                   时间复杂度:Θ(O(1)) 空间复杂度:Θ(O(1))


/*
作者:zyc2006
题目:p1000 A+B问题
*/
//如何写一份可以提交的代码?以P1000 A+B为例
#include <iostream>
using namespace std;
int main()
{
    int a, b; //定义两个变量名
    cin >> a >> b; //从标准输入流中输入两个整数
    cout << a + b << endl; //输出到标准输出流中

}
// 完成程序以后,点击下方的提交,即可看到测试结果

//把示例的第五,六行,最后一行删去就行了,这么麻烦干什么!


by 91527 六月 1, 2019, 11:14 a.m.

Solution_ID:32724            大佬们,无聊用函数!呵呵

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<bits/stdc++.h>

using namespace std;

int add(int x,inty){

    return x+y;

}

int a,b;

cin>>a>>b;

cout<<add(a,b);

return 0;

}





这是错的,哈哈哈哈哈哈哈。

没有主程序,没看出来请面壁去!



by 91363 五月 18, 2019, 10:02 p.m.

Solution_ID:32711            花式解法

                   时间复杂度:Θ(O(?????)) 空间复杂度:Θ(O(——)????)



#include<iostream>
using namespace std;
int main()
{
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

好了,这个源代码交上去肯定是.....Compile Error! 啪!(右脸被扇耳光的的声音) 好了,不开玩笑了,贡上正规的源代码:


#include<iostream>
using namespace std;
int a,b;
int main()
{
    cin>>a>>b;
    cout<<a+b;
    return 0;
}

接下来,我们再欣赏一下几位大神犇人的代码:


#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstring>
using namespace std;
struct node 
{
    int data,rev,sum;
    node *son[2],*pre;
    bool judge();
    bool isroot();
    void pushdown();
    void update();
    void setson(node *child,int lr);
}lct[233];
int top,a,b;
node *getnew(int x)
{
    node *now=lct+ ++top;
    now->data=x;
    now->pre=now->son[1]=now->son[0]=lct;
    now->sum=0;
    now->rev=0;
    return now;
}
bool node::judge(){return pre->son[1]==this;}
bool node::isroot()
{
    if(pre==lct)return true;
    return !(pre->son[1]==this||pre->son[0]==this);
}
void node::pushdown()
{
    if(this==lct||!rev)return;
    swap(son[0],son[1]);
    son[0]->rev^=1;
    son[1]->rev^=1;
    rev=0;
}
void node::update(){sum=son[1]->sum+son[0]->sum+data;}
void node::setson(node *child,int lr)
{
    this->pushdown();
    child->pre=this;
    son[lr]=child;
    this->update();
}
void rotate(node *now)
{
    node *father=now->pre,*grandfa=father->pre;
    if(!father->isroot()) grandfa->pushdown();
    father->pushdown();now->pushdown();
    int lr=now->judge();
    father->setson(now->son[lr^1],lr);
    if(father->isroot()) now->pre=grandfa;
    else grandfa->setson(now,father->judge());
    now->setson(father,lr^1);
    father->update();now->update();
    if(grandfa!=lct) grandfa->update();
}
void splay(node *now)
{
    if(now->isroot())return;
    for(;!now->isroot();rotate(now))
    if(!now->pre->isroot())
    now->judge()==now->pre->judge()?rotate(now->pre):rotate(now);
}
node *access(node *now)
{
    node *last=lct;
    for(;now!=lct;last=now,now=now->pre)
    {
        splay(now);
        now->setson(last,1);
    }
    return last;
}
void changeroot(node *now)
{
    access(now)->rev^=1;
    splay(now);
}
void connect(node *x,node *y)
{
    changeroot(x);
    x->pre=y;
    access(x);
}
void cut(node *x,node *y)
{
    changeroot(x);
    access(y);
    splay(x);
    x->pushdown();
    x->son[1]=y->pre=lct;
    x->update();
}
int query(node *x,node *y)
{
    changeroot(x);
    node *now=access(y);
    return now->sum;
}
int main()
{
    scanf("%d%d",&a,&b);
    node *A=getnew(a);
    node *B=getnew(b);
    //连边 Link
        connect(A,B);
    //断边 Cut
        cut(A,B);
    //再连边orz Link again
        connect(A,B);
    printf("%d\n",query(A,B)); 
    return 0;
}

你这是干啥捏?


#include<iostream>
#include<cstring>
using namespace std;
int lowbit(int a)
{
    return a&(-a);
}
int main()
{
    int n=2,m=1;
    int ans[m+1];
    int a[n+1],c[n+1],s[n+1];
    int o=0;
    memset(c,0,sizeof(c));
    s[0]=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        s[i]=s[i-1]+a[i];
        c[i]=s[i]-s[i-lowbit(i)];//树状数组创建前缀和优化
    }
    for(int i=1;i<=m;i++)
    {
        int q=2;
        //if(q==1)
        //{(没有更改操作)
        //    int x,y;
        //    cin>>x>>y;
        //    int j=x;
        //    while(j<=n)
        //    {
        //        c[j]+=y;
        //        j+=lowbit(j);
        //    }
        //}
        //else
        {
            int x=1,y=2;//求a[1]+a[2]的和
            int s1=0,s2=0,p=x-1;
            while(p>0)
            {
                s1+=c[p];
                p-=lowbit(p);//树状数组求和操作,用两个前缀和相减得到区间和
            }
            p=y;
            while(p>0)
            {
                s2+=c[p];
                p-=lowbit(p);
            }    
            o++;
            ans[o]=s2-s1;//存储答案
        }
    }
    for(int i=1;i<=o;i++)
        cout<<ans[i]<<endl;//输出
    return 0;
}

呵呵哒


#include <bits/stdc++.h>
#define ll long long
#define N 100000
using namespace std;
int sz[N], rev[N], tag[N], sum[N], ch[N][2], fa[N], val[N];
int n, m, rt, x;
void push_up(int x){
    sz[x] = sz[ch[x][0]] + sz[ch[x][1]] + 1;
    sum[x] = sum[ch[x][1]] + sum[ch[x][0]] + val[x];
}
void push_down(int x){
    if(rev[x]){
        swap(ch[x][0], ch[x][1]);
        if(ch[x][1]) rev[ch[x][1]] ^= 1;
        if(ch[x][0]) rev[ch[x][0]] ^= 1;
        rev[x] = 0;
    }
    if(tag[x]){
        if(ch[x][1]) tag[ch[x][1]] += tag[x], sum[ch[x][1]] += tag[x];
        if(ch[x][0]) tag[ch[x][0]] += tag[x], sum[ch[x][0]] += tag[x];
        tag[x] = 0;
    }
}
void rotate(int x, int &k){
    int y = fa[x], z = fa[fa[x]];
    int kind = ch[y][1] == x;
    if(y == k) k = x;
    else ch[z][ch[z][1]==y] = x;
    fa[x] = z; fa[y] = x; fa[ch[x][!kind]] = y;
    ch[y][kind] = ch[x][!kind]; ch[x][!kind] = y;
    push_up(y); push_up(x);
}
void splay(int x, int &k){
    while(x != k){
        int y = fa[x], z = fa[fa[x]];
        if(y != k) if(ch[y][1] == x ^ ch[z][1] == y) rotate(x, k);
        else rotate(y, k);
        rotate(x, k);
    }
}
int kth(int x, int k){
    push_down(x);
    int r = sz[ch[x][0]]+1;
    if(k == r) return x;
    if(k < r) return kth(ch[x][0], k);
    else return kth(ch[x][1], k-r);
}
void split(int l, int r){
    int x = kth(rt, l), y = kth(rt, r+2);
    splay(x, rt); splay(y, ch[rt][1]);
}
void rever(int l, int r){
    split(l, r);
    rev[ch[ch[rt][1]][0]] ^= 1;
}
void add(int l, int r, int v){
    split(l, r);
    tag[ch[ch[rt][1]][0]] += v;
    val[ch[ch[rt][1]][0]] += v;
    push_up(ch[ch[rt][1]][0]);
}
int build(int l, int r, int f){
    if(l > r) return 0;
    if(l == r){
        fa[l] = f;
        sz[l] = 1;
        return l;
    }
    int mid = l + r >> 1;
    ch[mid][0] = build(l, mid-1, mid);
    ch[mid][1] = build(mid+1, r, mid);
    fa[mid] = f;
    push_up(mid);
    return mid;
}
int asksum(int l, int r){
    split(l, r);
    return sum[ch[ch[rt][1]][0]];
}
int main(){
    //总共两个数
    n = 2;
    rt = build(1, n+2, 0);//建树
    for(int i = 1; i <= n; i++){
        scanf("%d", &x);
        add(i, i, x);//区间加
    }
    rever(1, n);//区间翻转
    printf("%d\n", asksum(1, n));//区间求和
    return 0;
}

俗话说:画蛇添足、多此一举,说的就是你们啊!


#include<cstdio>                                                  //头文件
#define NI 2                                                          
//从来不喜欢算log所以一般用常数 不知道算不算坏习惯 因为3个节点 所以log3(当然以2为底)上取整得2
struct edge
{
    int to,next,data;                                              //分别表示边的终点,下一条边的编号和边的权值
}e[30];                                                                     //邻接表,点少边少开30是为了浪啊
int v[10],d[10],lca[10][NI+1],f[10][NI+1],tot=0;      //数组开到10依然为了浪
//数组还解释嘛,v表示第一条边在邻接表中的编号,d是深度,lca[x][i]表示x向上跳2^i的节点,f[x][i]表示x向上跳2^i的距离和
void build(int x,int y,int z)                                      //建边
{
    e[++tot].to=y; e[tot].data=z; e[tot].next=v[x]; v[x]=tot;
    e[++tot].to=x; e[tot].data=z; e[tot].next=v[y]; v[y]=tot;
}
void dfs(int x)                                                        //递归建树
{
    for(int i=1;i<=NI;i++)                                   //懒,所以常数懒得优化
        f[x][i]=f[x][i-1]+f[lca[x][i-1]][i-1],
        lca[x][i]=lca[lca[x][i-1]][i-1];                   //建树的同时进行预处理
    for(int i=v[x];i;i=e[i].next)                              //遍历每个连接的点
    {
        int y=e[i].to;
        if(lca[x][0]==y) continue;
        lca[y][0]=x;                                       //小技巧:lca[x][0]即为x的父亲~~(向上跳2^0=1不就是父节点嘛)
        f[y][0]=e[i].data;
        d[y]=d[x]+1;
        dfs(y);                                            //再以这个节点为根建子树【这里真的用得到嘛??】
    }
}
int ask(int x,int y)                                             //询问,也是关键
{                                                                        
    if(d[x]<d[y]) {int t=x;x=y;y=t;}                  //把x搞成深的点
    int k=d[x]-d[y],ans=0;
    for(int i=0;i<=NI;i++)
        if(k&(1<<i))                                      //若能跳就把x跳一跳
            ans+=f[x][i],                              //更新信息
            x=lca[x][i];
    for(int i=NI;i>=0;i--)                                  //不知道能不能正着循环,好像倒着优,反正记得倒着就好了
        if(lca[x][i]!=lca[y][i])                            //如果x跳2^i和y跳2^j没跳到一起就让他们跳
            ans+=f[x][i]+f[y][i],
            x=lca[x][i],y=lca[y][i];
    return ans+f[x][0]+f[y][0];                           //跳到LCA上去(每步跳的时候都要更新信息,而且要在跳之前更新信息哦~)
}
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    build(1,2,a);
    build(1,3,b);                                                       //分别建1 2、1 3之间的边
    dfs(1);                                                                //以1为根建树
    printf("%d",ask(2,3));                                         //求解2 3到它们的LCA的距离和并输出
}

#include <cstdio> 
#include <iostream>
#define lol long long int 
#define A using
#define Long namespace
#define time std
#define ago ;
#define Here int
#define was main
#define a ()
#define monkey {  
#define called lol x,y;
#define Jack cin>>x>>y;
#define ak cout<<x+y;
#define ioi return 0;
#define Orz }
A Long time ago Here was a monkey called Jack ak ioi Orz

SPFA:

#include<cstdio>
using namespace std;
int n,m,a,b,op,head[200009],next[200009],dis[200009],len[200009],v[200009],l,r,team[200009],pd[100009],u,v1,e;
int lt(int x,int y,int z)
{
    op++,v[op]=y;
    next[op]=head[x],head[x]=op,len[op]=z;
}
int SPFA(int s,int f)//SPFA……
{
    for(int i=1;i<=200009;i++){dis[i]=999999999;}
    l=0,r=1,team[1]=s,pd[s]=1,dis[s]=0;
    while(l!=r)
    {
        l=(l+1)%90000,u=team[l],pd[u]=0,e=head[u];
        while(e!=0)
        {
            v1=v[e];
            if(dis[v1]>dis[u]+len[e])
            {
                dis[v1]=dis[u]+len[e];
                if(!pd[v1])
                {
                    r=(r+1)%90000,
                    team[r]=v1,
                    pd[v1]=1;
                }
            }
            e=next[e];
        } 
    }
    return dis[f];
}
int main()
{
    scanf("%d%d",&a,&b);
    lt(1,2,a);lt(2,3,b);//1到2为a,2到3为b,1到3即为a+b……
    printf("%d",SPFA(1,3));
    return 0;
}

Floyd:

#include<iostream>
#include<cstring>
using namespace std;
long long n=3,a,b,dis[4][4];
int main()
{
    cin>>a>>b;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            dis[i][j]=2147483647;
        }
    }
    dis[1][2]=a,dis[2][3]=b;
    for(int k=1;k<=n;k++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);//Floyd……
            }
        }
    }
    cout<<dis[1][3];
}

递归:

#include<iostream>
using namespace std;
long long a,b,c;
long long dg(long long a)
{
    if(a<=5){return a;}//防超时……
    return (dg(a/2)+dg(a-a/2));
}
int main()
{
    cin>>a>>b;
    c=dg(a)+dg(b);
    cout<<c;
}

高精:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char a1[1000],b1[1000];
      int a[1000]={0},b[1000]={0},c[1000]={0},la,lb,lc,i,x;
      cin>>a1>>b1;
      la=strlen(a1);
      lb=strlen(b1);
      for(i=0;i<=la-1;i++){a[la-i]=a1[i]-48;}
    for(i=0;i<=lb-1;i++){b[lb-i]=b1[i]-48;}
      lc=1,x=0;
    while(lc<=la||lc<=lb){c[lc]=a[lc]+b[lc]+x,x=c[lc]/10,c[lc]%=10,lc++;}
    c[lc]=x;
    if(c[lc]==0){lc--;}
    for(i=lc;i>=1;i--){cout<<c[i];}
    cout<<endl;
    return 0;
}

压位高精:

#include <cstdio>  
#include <cstring>  
#include <cstdlib>  
#include <iostream>  
#define p 8
#define carry 100000000
using namespace std;  
const int Maxn=50001;  
char s1[Maxn],s2[Maxn];  
int a[Maxn],b[Maxn],ans[Maxn];  
int change(char s[],int n[])   
{  
    char temp[Maxn];   
    int len=strlen(s+1),cur=0;  
    while(len/p)
    {  
        strncpy(temp,s+len-p+1,p);
        n[++cur]=atoi(temp); 
        len-=p;
    }  
    if(len)
    {
        memset(temp,0,sizeof(temp));  
        strncpy(temp,s+1,len);  
        n[++cur]=atoi(temp);   
    }  
    return cur;
}  
int add(int a[],int b[],int c[],int l1,int l2)  
{  
    int x=0,l3=max(l1,l2);  
    for(int i=1;i<=l3;i++)
    {  
        c[i]=a[i]+b[i]+x;  
        x=c[i]/carry;
        c[i]%=carry;  
    }  
    while(x>0){c[++l3]=x%10;x/=10;}  
    return l3;
}  
void print(int a[],int len)  
{   
    printf("%d",a[len]);
    for(int i=len-1;i>=1;i--)printf("%0*d",p,a[i]);
    printf("\n");  
}  
int main()  
{
    scanf("%s%s",s1+1,s2+1);
    int la=change(s1,a);
    int lb=change(s2,b);
    int len=add(a,b,ans,la,lb);    
    print(ans,len);
}  

Dijkstra+STL的优先队列优化。48ms.

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <climits>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
#include <ctime>
#include <string>
#include <cstring>
using namespace std;
const int N=405;
struct Edge {
    int v,w;
};
vector<Edge> edge[N*N];
int n;
int dis[N*N];
bool vis[N*N];
struct cmp {
    bool operator()(int a,int b) {
        return dis[a]>dis[b];
    }
};
int Dijkstra(int start,int end)
{
    priority_queue<int,vector<int>,cmp> dijQue;
    memset(dis,-1,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dijQue.push(start);
    dis[start]=0;
    while(!dijQue.empty()) {
        int u=dijQue.top();
        dijQue.pop();
        vis[u]=0;
        if(u==end)
            break;
        for(int i=0; i<edge[u].size(); i++) {
            int v=edge[u][i].v;
            if(dis[v]==-1 || dis[v]>dis[u]+edge[u][i].w) {
                dis[v]=dis[u]+edge[u][i].w;
                if(!vis[v]) {
                    vis[v]=true;
                    dijQue.push(v);
                }
            }
        }
    }
    return dis[end];
}
int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    Edge Qpush;

    Qpush.v=1;
    Qpush.w=a;
    edge[0].push_back(Qpush);

    Qpush.v=2;
    Qpush.w=b;
    edge[1].push_back(Qpush);

    printf("%d",Dijkstra(0,2));
    return 0;
}

可以模拟人工运算的方法。

#include <iostream> 
#include <cmath>
using namespace std;
int fu=1,f=1,a,b,c=0;
int main()
{
    cin>>a>>b;
    if(a<0&&b>0)fu=2;
    if(a>0&&b<0)fu=3;
    if(a<0&&b<0)f=-1;
    if(a==0){cout<<b;return 0;}
    if(b==0){cout<<a;return 0;} 
    a=abs(a);
    b=abs(b);
    if(a>b&&fu==3)f=1;
    if(b>a&&fu==3)f=-1;
    if(b>a&&fu==2)f=1;
    if(b<a&&fu==2)f=-1;
    if(fu==1)c=a+b;
    if(fu>1)c=max(a,b)-min(a,b);
    c*=f;
    cout<<c;
    return 0;
}

明显的字典树

以每个数字建立字典树

建立一次查询一次

spj正负 下面上代码

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct node{
    int str[26];
    int sum;
}s[1000];
char str1[100];
int t=0,tot=0,ss=0;
bool f1;
void built()
{
    t=0;
    for(int i=0;i<strlen(str1);i++)
    {
         if(str1[i]=='-'){
             f1=true;continue;
         }
         if(!s[t].str[str1[i]-'0'])
         s[t].str[str1[i]-'0']=++tot;
         t=s[t].str[str1[i]-'0'];
         s[t].sum=str1[i]-'0';
    }
}
int query()
{
   int t=0;int s1=0;
   for(int i=0;i<strlen(str1);i++)
   {
           if(str1[i]=='-') continue;
           if(!s[t].str[str1[i]-'0']) return s1;
           t=s[t].str[str1[i]-'0'];
           s1=s1*10+s[t].sum;
   }
   return s1;
}
int main()
{    
  for(int i=1;i<=2;i++)
  {
      f1=false;
      scanf("%s",str1);
    built();
    if(f1)
      ss-=query();
      else ss+=query();
  }
  printf("%d",ss);
  return 0;    
}
<section>

</section>

最小生成树最好了

#include <cstdio>
#include <algorithm>
#define INF 2140000000
using namespace std;
struct tree{int x,y,t;}a[10];
bool cmp(const tree&a,const tree&b){return a.t<b.t;}
int f[11],i,j,k,n,m,x,y,t,ans;
int root(int x){if (f[x]==x) return x;f[x]=root(f[x]);return f[x];}
int main(){
    for (i=1;i<=10;i++) f[i]=i;
    for (i=1;i<=2;i++){
        scanf("%d",&a[i].t);
        a[i].x=i+1;a[i].y=1;k++;
    }
    a[++k].x=1;a[k].y=3,a[k].t=INF;
    sort(a+1,a+1+k,cmp);
    for (i=1;i<=k;i++){
    //    printf("%d %d %d %d\n",k,a[i].x,a[i].y,a[i].t);
        x=root(a[i].x);y=root(a[i].y);
        if (x!=y) f[x]=y,ans+=a[i].t; 
    }
    printf("%d\n",ans);
}

附:(心脏病(heart disease)是一类常见循环系统疾病。循环系统由心脏、血管和调节血液循环的神经体液组织构成,循环系统疾病也称为心血管病,流行病学研究显示,心血管疾病的患病率和死亡率在持续升高。)


by 90993 五月 12, 2019, 8:34 p.m.

Solution_ID:32710            宏定义一波

                   时间复杂度:Θ(O(1)) 空间复杂度:Θ(O(-))

#include <cstdio>

#include <iostream>

#define lol long long int

#define A using 

#define Long namespace

#define time std

#define ago ;

#define Here int 

#define was main 

#define a () 

#define monkey { 

#define called lol x,y; 

#define Jack cin>>x>>y;

#define ak cout<<x+y;

#define ioi return 0; 

#define Orz }

A Long time ago Here was a monkey called Jack ak ioi Orz


by 90993 五月 12, 2019, 8:14 p.m.