A+B problem

先点赞后观看,禁止白嫖

A+B porblem的多种做法!!!

1.正常做法: 

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

速度和复杂度较慢不建议使用

2.最短:

a,b=map(int,input().split())
print(a+b)

使用了Python3来实现

3.最快:

#include<stdio.h>
int read() {
    int x=0;
    char c=getchar();
    while(c>='0'&&c<='9') {
        x=(x<<3)+(x<<1)+(c^48);
        c=getchar();
    }
    return x;
}
void write(int x) {
    if(x>9)write(x/10);
    putchar(x%10+'0');
}
main() {
    printf("%d",read()+read());
}

4.高精度:

#include<bits/stdc++.h> 
using namespace std;
const int MAXN=1005;
int a[MAXN],b[MAXN],c[MAXN],ans[MAXN],Len_a,Len_b,Len_ans;
void Read(int *a,int&len)
{
    string cur;
    cin>>cur;
    len=cur.length();
    for(int i=0;i<len;i++)a[i]=cur[i]-48;
    reverse(a,a+len);
}
int main(){
    Read(a,Len_a);
    Read(b,Len_b);
    Len_ans=max(Len_a,Len_b);
    for(int i=0;i<=Len_ans;i++)
    {
        ans[i]=a[i]+b[i]+c[i];
        if(ans[i]>9)c[i+1]=ans[i]/10,ans[i]-=10;    
    }
    while(ans[Len_ans]>0)Len_ans++;
    for(int i=Len_ans-1;i>=0;i--)
        cout<<ans[i];
    return 0;    
}

5.随机数:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a;
    srand(time(0));
    a=rand();
    cout<<a;
}

6.二分答案:

#include<bits/stdc++.h>
using namespace std;
int a,b,mid,l=INT_MIN,r=INT_MAX; 
int main(){
    cin>>a>>b;
    while(l<r){
        mid=(l+r)/2;
        if(mid<a+b)
            l=mid;
        else if(mid>a+b)
            r=mid;
        else{
            cout<<mid;
            return 0;
        }
    }
}

7.递归:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
inline void fun(int k){
    if(k==a*b*10){
        cout<<a+b; 
        return;
    }
    fun(k+1);
}
signed main(){
    cin>>a>>b;
    fun(1);
}

8. 二进制:

#include<bits/stdc++.h>
using namespace std;
int n,m,ans,a[1002]; 
int main(){
    cin>>n>>m;
    for(int i=30;i>=0;i--){
        if((n>>i)&1){
            ans+=(1<<i);
        }
        if((m>>i)&1){
            ans+=(1<<i);
        }
    }
    cout<<ans;
}

9.位运算:

#include<iostream>
using namespace std;
int a,b,x,y,s,t;
int main(){
    cin>>a>>b;
    x=a&b;
    y=a^b;
    while(x){
        s=y;
        t=x<<1;
        x=s&t;
        y=s^t;
    }
    cout<<y;
}

10.spfa:

#include<iostream>
#include<queue>
using namespace std;
queue<int> q;
struct node{
    int v;
    int w;
    int nex;
}e[4];
int a,b,cnt,first[4],inq[4],dis[4];
void add(int U,int V,int W){
    e[++cnt].v=V;
    e[cnt].w=W;
    e[cnt].nex=first[U];
    first[U]=cnt;
}
int main(){
    cin>>a>>b;
    add(1,2,a);
    add(2,3,b);
    for(int i=1;i<=3;i++)
        dis[i]=999999999;
    dis[1]=0;
    inq[1]=1;
    q.push(1);
    while(!q.empty()){
        int v=q.front();
        q.pop();
        inq[v]=0;
        for(int i=first[v];i;i=e[i].nex){
            int k=e[i].v;
            if(dis[k]>dis[v]+e[i].w){
                dis[k]=dis[v]+e[i].w;
                if(!inq[k]){
                    q.push(k);
                    inq[k]=1;
                }
            }
        }
    }
    cout<<dis[3];
}

11.floyd:

#include<bits/stdc++.h>
using namespace std;
int a,b,dis[4][4];
int main(){
    cin>>a>>b;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            dis[i][j]=INT_MAX;
    dis[1][2]=a;
    dis[2][3]=b;
    for(int k=1;k<=3;k++)
        for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    cout<<dis[1][3];
}

12.dijkstra:

#include<iostream>
using namespace std;
int a,b,v,Min,w[4][4],vis[4],dis[4];
int main(){
    cin>>a>>b;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            w[i][j]=999999999;
    w[1][2]=a;
    w[2][3]=b;
    for(int i=1;i<=3;i++){
        dis[i]=w[1][i];
        vis[i]=0;
    }
    vis[1]=1;
    dis[1]=0;
    for(int i=2;i<=3;i++){
        Min=999999999;
        for(int j=1;j<=3;j++)
            if(!vis[j]&&dis[j]<Min){
                Min=dis[j];
                v=j;
            }
        vis[v]=1;
        for(int j=1;j<=3;j++)
            if(dis[j]>dis[v]+w[v][j]&&!vis[j])
                dis[j]=dis[v]+w[v][j];
    }
    cout<<dis[3];
    return 0;
}

13.字典树:

#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;    
}

14.树状数组:

#include<bits/stdc++.h>
using namespace std;
int a,b,s[3];
int lowbit(int x){
    return x&(-x);
} 
int getsum(int x){
    int sum=0;
    for(int i=x;i>0;i-=lowbit(i)) 
        sum+=s[i];
    return sum;
}
void update(int x,int y){
    for(int i=x;i<=2;i+=lowbit(i))
        s[i]+=y;
}
int main(){
    cin>>a;
    update(1,a);
    cin>>b;
    update(2,b);
    cout<<getsum(2);
}

15.树形结构:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int size_=1000;
typedef struct node;
typedef node*tree;
struct node{
    int data;
    tree lchild,rchild;
};
tree bt;
int i=0,a[size_],ans=0;
void build(tree&bt){
    if(a[++i]!=0){
        bt=new node;
        bt->data=a[i];
        build(bt->lchild);
        build(bt->rchild);
    }else{
        bt=NULL;
    }
}
void search(tree&bt){
    if(bt&&200>=bt->data>0){
        ans=ans+bt->data;
        search(bt->lchild);
        search(bt->rchild);
    }
}
signed main(){
    cin>>a[1]>>a[2];
    build(bt);
    search(bt);
    cout<<ans;
}

16.极限1(斜率逼近):

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b;
int limit(int x){
    double k2=1.0*x;
    for(int i=1;i<=x*20000;i++){
        double k=1.0*i/10000;
        if(k>k2){
            return 1.0*(i-1)/10000;
        }
    }
    return INT_MAX;
}
signed main(){
    cin>>a>>b;
    cout<<limit(a)+limit(b);
}

17.极限2(求导法+洛必达法则):

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a,b,n=1,k=3,k2=2;
int f(int x,int k,int k2){
    int a1=1,a2=1;
    for(int i=1;i<=k;i++){
        a1*=x;
    }
    for(int i=1;i<=k2;i++){
        a2*=x;
    }
    return a1/a2;
}
int qpow(int a,int b){
    int ans=1;
    while(b){
        if(b&1) ans=ans*a;
        a=a*a;
        b>>=1;
    }
    return ans;
}
int derivative(int x,int n){
    return n*qpow(x,n-1);
}//f(x)=x^n,f'(x)?
int lobida_s_Law(int a,int b){
    if(a!=0&&b!=0){
        return a+b;
    }
    return lobida_s_Law(derivative(a,k-k2),derivative(b,k-k2));
}
signed main(){
    cin>>a>>b;
    cout<<lobida_s_Law(f(a,k,k2),f(b,k,k2));
}

18.并查集:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[102],father[102];
int sum(int x){
    if(father[x]!=0) return sum(father[x])+a[x];
    else return a[x];
}
void add(int x,int y){
    father[y]=x;
}
signed main(){
    cin>>a[1]>>a[2];
    add(1,2);
    cout<<sum(2);
}

19.慢速读:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y;
int sr(){
    int k;
    cin>>k;
    int i=k;
    while(++i!=(int)(1e8*6));
    return k;
}
void sp(int x){
    int i=0;
    while(++i!=(int)(1e8*6));
    cout<<x;
}
signed main(){
    x=sr();
    y=sr();
    sp(x+y);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值