176 条题解

  • -8
    @ 2022-1-8 13:34:43

    水一篇题解哈哈哈哈哈

    声明:为了不错误引导新手上路,我会区分新手和神犇的解题方法(当然神犇不是我)

    新手请看这里:

    #include<iostream>
    using namespace std;
    int main()
    {
        int a,b;   //定义a,b两数,数据规模巨大的话用long long int也不是不可~
        cin>>a>>b;  //输入a,b
        cout<<a+b;  //输出a+b的结果,等同于int c=a+b; cout<<c;
        return 0;  //return 0好习惯
    }
    

    神犇请看这里:(高精度加法)

    先用字符串数组,以字符形式储存两个大数。再依次储存被加数,加数,和。之后再将字符数字转为四位一块的整数数字,逐块相加,并进位,最后计算和的块的总数即可。

    #include <bits/stdc++.h>
    #define N 200
    int Pow(int a, int b)
    {
        int i = 0, result = 1;
        for(i = 0; i < b; ++i)
        {
            result *= a;
        }
        return result;
    }
    int main()
    {
        char stra[N], strb[N];
        int i = 0, step = 4, carry = 0;
        int lengtha, lengthb, maxlength, resultsize;
        int numa[N], numb[N],numc[N];
        memset(numa, 0, sizeof(numa));
        memset(numb, 0, sizeof(numb));
        memset(numc, 0, sizeof(numc));
        scanf("%s%s", stra, strb);
        lengtha = strlen(stra);
        lengthb = strlen(strb);
        for(i = lengtha-1; i >= 0; --i)
        {
            numa[(lengtha-1-i)/step] += (stra[i]-'0')*Pow(10,(lengtha-1-i)%step);
        }
        for(i = lengthb-1; i >= 0; --i)
        {
            numb[(lengthb-1-i)/step] += (strb[i]-'0')*Pow(10,(lengthb-1-i)%step);
        }
        maxlength = lengtha > lengthb ? lengtha : lengthb;
        for(i = 0; i <= maxlength/step; ++i)
        {
            numc[i] = (numa[i] + numb[i])%Pow(10, step) + carry; 
            carry = (numa[i] + numb[i])/Pow(10, step); 
        }
        resultsize = numc[maxlength/step] > 0 ? maxlength/step : maxlength/step - 1;
        printf("%d", numc[resultsize]);
        for(i = resultsize-1; i >= 0; --i)
        {
            printf("%04d", numc[i]); 
        }
        printf("\n");
        return 0;
    }
    
    • -9
      @ 2022-8-21 14:37:57

      🚀️

      • -10
        @ 2022-1-1 7:58:03

        输入 aa , bb,输出 a+ba+b,然后我们可以定义 int 整型量来存 a,ba,b ,最后用 + 号链接,输出即可

        • -12
          @ 2022-3-28 19:23:04

          上代码:

          #include<bits/stdc++.h>
          using namespace std;
          void dfs(int a,int b,int ans,int flag)
          {
              if(flag){printf("%d",ans);exit(0);}
              dfs(a,b,a+b,flag+1);
              // 加法
          }
          int main()
          {
              string s="";
              getline(cin,s);
              // 输入
              int a=0,b=0,flag=0,fa=1,fb=1;
              // fa:a符号,fb:b符号
              for(int i=0;i<s.size();i++)
              {
                  if(s[i]==' ') flag=1;// 遇到空格读下一个数
                  if(s[i]=='-') 
                  {
                      if(flag) fb=-1;
                      else fa=-1;
                  }
                  if(s[i]>='0'&&s[i]<='9')
                  {
                      if(flag) b=(b<<1)+(b<<3)+(s[i]^48);// b*10+s[i]-'0'
                      else a=(a<<1)+(a<<3)+(s[i]^48);// a*10+s[i]-'0'
                  }
              }
              dfs(a*fa,b*fb,0,0);
              return 0;
          }
          

          这题还是挺简单的

          • @ 2022-7-25 16:28:42

            不要搞这些花里胡哨的了(你是洛谷的吧)

        • -12
          @ 2022-2-10 21:32:48

          简单的代码:

          main(){int a,b;scanf("%d%d",&a,&b);printf("%d",a+b);}
          
          • -12
            @ 2022-1-20 11:35:02

            本人太弱不会a+b,只能冲一发退火来碰碰运气

            #include<bits/stdc++.h> 
            #define ll long long
            using namespace std;
            const double d=0.999;
            const double lim=1e-10;
            ll a,b;
            ll ans;
            ll num;
            int read()
            {
            	int x=0,f=1;
            	char ch=getchar();
            	while(ch<'0'||ch>'9')
            	{
            		if(ch=='-') f=-1;
            		ch=getchar();
            	}
            	while(ch>='0'&&ch<='9')
            	{
            		x=x*10+(ch^48);
            		ch=getchar();
            	}
            	return x*f;
            }
            int calc(int x)
            {
                return abs(a+b-x)-abs(a+b-ans);
            }
            void ghost_fire()
            {
                double T=1000000;
                while(T>lim)
                {
                    int x=num+((rand()<<1)-RAND_MAX)*T;
                    int del=calc(x);
                    if(del<0)
                    {
                        ans=x;
                        num=x;
                    }
                    else if(exp(-del/T)>(double)rand()/RAND_MAX) num=x;
                    T*=d;
                }
            }
            void work()
            {
            	for(int i=1;i<=100;i++) ghost_fire();
            }
            int main()
            {
                a=read();
                b=read();
                work();
                cout<<ans<<endl;
                return 0;
            }
            
            • @ 2022-1-28 15:21:56

              emm……

            • @ 2022-7-25 16:32:12

              emmm……您会模拟退火?膜拜

            • @ 2024-8-27 13:14:06

              orz

          • -17
            @ 2022-1-28 11:03:13

            这题是个练for循环的好题。

            #include<bits/stdc++.h> 
             using namespace std; 
              int a,b; 
              int main(){ 
              for(int i=1;i<=2;i++) {
                 cin>>a;
               b+=a;
              } 
              cout<<b; 
              }
            
            • @ 2022-3-5 16:51:48

              您完全不初始化的是吗

            • @ 2022-11-9 21:07:00

              您完全不初始化变量 b 是吗

            • @ 2024-8-28 8:52:13

              @ 在main()外面的都自动初始化为0了谢谢

            • @ 2024-8-28 8:52:36

              @ 在main()外面的都自动初始化为0了谢谢

          • -20
            @ 2022-2-12 12:52:51

            a + b problem.

            • -21
              @ 2021-11-30 9:33:53

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

              • -36
                @ 2021-8-8 16:35:12

                用线段树+标记永久化即可

                #include <cstdio>
                #define mid L + (R-L >> 1)
                const int maxn = 1e5+5;
                
                int n, a[maxn], m;
                int sl, sr, add;
                
                struct segtree{
                	int sum[maxn<<2], tag[maxn<<2];
                	inline int lc(int o){return o<<1;}
                	inline int rc(int o){return o<<1|1;}
                	void build(int o, int L, int R){
                		if(L == R){sum[o] = a[L];return;}
                		int M = mid;
                		build(lc(o), L, M);
                		build(rc(o), M+1, R);
                		sum[o] = sum[lc(o)] + sum[rc(o)];
                	}
                	void maintain(int o, int L, int R){
                		if(R>L){
                			sum[o] = sum[lc(o)] + sum[rc(o)];
                			sum[o] += tag[o] * (R-L+1);
                		} else {
                			sum[o] += tag[o];
                			tag[o] = 0;
                		}
                	}
                	void updata(int o, int L, int R){
                		if(sl <= L && R <= sr)tag[o] += add;
                		else{
                			int M = mid;
                			if(sl <= M)updata(lc(o), L, M);
                			if(sr > M)updata(rc(o), M+1, R);
                		}
                		maintain(o, L, R);
                	}
                	int query(int o, int L, int R, int tags){
                		if(sl <= L && R <= sr)return sum[o] + tags * (R-L+1);
                		else {
                			int M = mid, res = 0;
                			if(sl <= M)res += query(lc(o), L, M, tags+tag[o]);
                			if(sr > M)res += query(rc(o), M+1, R, tags+tag[o]);
                			return res;
                		}
                	}
                } sol;
                
                signed main(){
                	n = 1; 
                	int a, b; 
                	scanf("%d%d", &a, &b);
                	sol.build(1, 1, n);
                	add=a; sl=1; sr=1;
                	sol.updata(1, 1, 1);
                	add=b;
                	sol.updata(1, 1, 1);
                	printf("%d\n", sol.query(1, 1, n, 0));
                	return 0;
                }
                

                当然,树状数组也可以,并且更快

                #include <iostream>
                using namespace std;
                const int n = 1;
                int a, b;
                int c[500005];
                inline int lowbit(int x){
                	return x & (-x);
                }
                inline int sum(int x){
                	int ans=0;
                	for(int i=x;i>0;i-=lowbit(i))
                	ans+=c[i];
                	return ans;
                }
                void add(int x,int y){
                	for(int i=x;i<=n;i+=lowbit(i))
                	c[i]+=y;
                }
                int main(){
                	cin>>a>>b;
                	add(1, a); add(1, b);
                	printf("%d\n", sum(1));
                	return 0;
                }
                
                • @ 2022-7-25 16:33:55

                  咕咕咕

                • @ 2022-7-25 16:34:54

                  装摸做样的建了棵树……

                • @ 2025-2-21 19:59:13

                  菜菜菜

              • -36
                @ 2021-5-24 13:48:12

                二分求解即可

                #include<bits/stdc++.h>
                #define N 100010
                using namespace std;
                int a,b;
                int s(int a,int b) {
                	int l=-1e9,r=1e9,mid;
                	while(l<r) {
                    	mid=(l+r)/2;
                    	if(mid==a+b)
                    	    return mid;
                    	else if(mid>a+b)
                    	    r=mid;
                    	else
                    	    l=mid;
                    }
                }
                int main() {
                	cin>>a>>b;
                	cout<<s(a,b);
                	return 0;
                }
                
                • @ 2025-2-21 19:58:24

                  需要这么麻烦吗????????

              • -37
                @ 2021-5-19 22:01:00

                C++11の高端的题解!

                #include<iostream>
                #include<cstdio>
                #include<algorithm>
                #include<cstring>
                #include<cmath>
                #include<string>
                #include<cstdlib>
                using namespace std;//超长无关紧要的高端的头文件
                int a,b;//定义高端的变量
                int main(){
                	scanf("%d%d",&a,&b);//快速读入高端的变量
                	printf("%d",a+b);//经过简简单单的高端的计算后,快速输出高端的结果!
                	return 0;//高端而潇洒的结尾~
                }
                

                看这高端的注释,不点个赞吗?

                • -41
                  @ 2021-9-20 21:43:22

                  高精度水一发......

                  #include <iostream>
                  #include <string>
                  #include <algorithm>
                  using namespace std;
                  string a,b;
                  int x[1005],y[1005],ans[1005];
                  int main()
                  {
                  	cin>>a>>b;
                  	int la=a.size(),lb=b.size();
                  	reverse(a.begin(),a.end());
                  	reverse(b.begin(),b.end());
                  	int n,i,j;
                  	for(i=0;i<la;i++)    x[i]=a[i]-'0';
                  	for(i=0;i<lb;i++)    y[i]=b[i]-'0';
                  	int temp,jin=0;
                  	for(i=0;i<1000;i++)
                  	{
                  		temp=x[i]+y[i]+jin;
                  		if(temp>=10)
                  		{
                  			jin=1;
                  			ans[i]=temp-10;
                  		}
                  		if(temp<10)
                  		{
                  			jin=0;
                  			ans[i]=temp;
                  		}
                  	}
                  	for(i=1000;i>=0;i--)
                  		if(ans[i]!=0)
                  			break;		
                  	for(;i>=0;i--)
                  	{
                  		cout<<ans[i];
                  	}
                      return 0;
                  }
                  
                  • @ 2022-7-25 16:33:37

                    我也写了一份高精度,大佬帮忙看看除法哪儿错了呗

                • -49
                  @ 2021-8-27 15:15:12

                  这题挺简单的,是个入门题

                  不说了,直接上code:

                  #include<bits/stdc++.h>

                  using namespace std;

                  int a,b;//定义

                  int main() {

                  cin>>a>>b;//输入
                  cout<<a+b;//输出
                  

                  }

                • -50
                  @ 2021-9-25 11:11:53

                  输出A+B非常简单
                  #include <bits/stdc++.h> using namespace std; int a,b; cin>>a>>b; cout<<a+b<<endl;//输出; return 0;//华丽结束

                  • -85
                    @ 2021-10-4 23:13:10

                    #include #define mid L + (R-L >> 1) const int maxn = 1e5+5;

                  信息

                  ID
                  56
                  时间
                  1000ms
                  内存
                  1024MiB
                  难度
                  1
                  标签
                  递交数
                  10344
                  已通过
                  4670
                  上传者