68 条题解

  • -6
    @ 2024-9-14 22:25:13
    高精度加法

    新人不会康林一个人 @杨时欢 俩提交都AC阿米诺斯 亲放心食用

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    const int INF=0x3f3f3f;
    int main(){
        string a1,b1;
        int a[500],b[500],c[500];
        cin>>a1>>b1;
        int lena=a1.size();
        int lenb=b1.size();
        for(int i=0;i<lena;i++){
            a[lena-i]=a1[i]-'0';
        }
        for(int i=0;i<lenb;i++){
            b[lenb-i]=b1[i]-'0';
        }
        int lenc=1,x=0;
        while(lenc<=lena || lenc<=lenb){
            c[lenc]=a[lenc]+b[lenc]+x;
            x=c[lenc]/10;
            c[lenc]=c[lenc]%10;
            lenc++;
        }
        if(x>0){
           c[lenc]=x;
        }
        else{
           lenc--;
        }
        for(int i=lenc;i>=1;i--)
            cout<<c[i];
        cout<<endl;
    
    	return 0;
    }
    
    提示:此代码可提交题@@高精度加法***
    
    • -7
      @ 2026-2-1 11:31:04

      http://ybt.ssoier.cn:8088/problem_show.php?pid=1510

      #include <bits/stdc++.h>
      using namespace std;
      const int N = 1e5 + 10;
      const int INF = 0x3f3f3f3f;
      
      int T;
      int r[30];//r[i]表示第i个时间点需要工作的人数 
      int n;
      int num[30] , x;//num[i]表示第i个时间点有多少人开始工作 
      int L , R , ans; 
      vector<pair<int,int> > vc[N];
      int dis[N];
      bool vis[N];
      queue<int> q;
      void spfa(int mid)//最长路 
      {
      	memset(dis, -INF , sizeof(dis));
      	memset(vis , 0 , sizeof(vis));
      	while(!q.empty()) q.pop();
      	dis[0] = 0;
      	vis[0] = 1;
      	
      	q.push(0);
      	
      	while(!q.empty())
      	{
      		int u = q.front();
      		q.pop();
      		if( u == 24 && dis[u] > mid)
      			return;
      		
      		vis[u] = 0;
      		for(int i = 0; i < vc[u].size(); i++)
      		{
      			int v = vc[u][i].first , w = vc[u][i].second;
      			if(dis[v] < dis[u] + w)
      			{
      				dis[v] = dis[u] +w;
      				if(!vis[v]) 
      				{
      					q.push(v);	
      					vis[v] = 1;
      				}
      			}	
      		} 
      	}
      }
      
      bool check(int mid)//一共mid人工作 
      {
      	for(int i = 0; i <= 24; i++)
      	{
      		vc[i].clear();	
      	}
      	
      	//隐藏不等式
      	//sum[i] 从1点到i点需要工作的人数
      	//	sum[i] - sum[i - 1] >= 0
      	//	sum[i - 1] - sum[i] >= -num[i]
      	for(int i = 1; i <= 24; i++)
      	{
      		vc[i - 1].push_back({i , 0});
      		vc[i].push_back({i - 1 ,-num[i]});	
      	} 
      //	23 24 1 2 3 4 5 6 7 8 9
      //	sum[i] - sum[i - 8] >= r[i]
      	for(int i = 8; i <= 24; i++)
      		vc[i - 8].push_back({i , r[i]});
      	
      //	sum[24] - sum[8] <= mid - r[i]; 
      //	sum[i] - sum[i + 16] >= r[i] - mid;
      	for(int i = 1; i <= 8; i++)
      		vc[i + 16].push_back({i , r[i] - mid});
      		
      //	sum[24] - sum[0] <= mid
      	vc[0].push_back({24,mid});
      	vc[24].push_back({0, -mid});
      	
      	spfa(mid);
      	return dis[24] == mid;
      }
      
      int main()
      {
      	cin >> T;
      	while( T-- )
      	{
      		memset(num , 0 , sizeof(num));
      		for(int i = 1; i <= 24; i++)
      			cin >> r[i];
      			
      		cin >> n;
      		//表示每个人开始工作的时间 
      		for(int i = 1; i <= n; i++)
      		{
      			cin >> x;
      			num[x + 1]++;
      		}
      		//二分答案 
      		L = 0 , R = n , ans = -1;
      		while( L <= R)
      		{
      			int mid = L + R >> 1;
      			if(check(mid))
      			{
      				ans = mid;
      				R = mid - 1;
      			}
      			else
      				L = mid + 1;
      		}
      		
      		if(ans == -1)
      			cout << "No Solution\n";
      		else
      			cout << ans << endl;
      	}
      
      	return 0;
      }
      
      
      • -8
        @ 2026-2-1 10:09:16

        http://ybt.ssoier.cn:8088/problem_show.php?pid=1509

        #include <bits/stdc++.h>
        using namespace std;
        const int N = 5e4 + 10;
        const int INF = 0x3f3f3f3f;
        
        int n;
        int u , v , w , maxx;
        vector<pair<int,int> > vc[N];
        int dis[N];
        bool vis[N];
        void spfa()//求最长路!!! 
        {
        	memset(dis, -INF, sizeof(dis));
        	dis[0] = 0;
        	vis[0] = 1;//表示当前点是否在队列中 
        	queue<int> q;
        	q.push(0);
        	
        	while(!q.empty())
        	{
        		int u = q.front();
        		q.pop();
        		vis[u] = 0;
        		for(int i = 0; i < vc[u].size(); i++)
        		{
        			int v = vc[u][i].first , w = vc[u][i].second;
        			if(dis[v] < dis[u] + w)
        			{
        				dis[v] = dis[u] +w;
        				if(!vis[v]) 
        				{
        					q.push(v);	
        					vis[v] = 1;
        				}
        			}	
        		} 
        	}
        }
        
        int main()
        {
        	cin >> n;
        	for(int i = 1; i <= n; i++)
        	{
        		cin >> u >> v >> w;
        		u++ , v++;//整体右移 
        		//sum[v] - sum[u - 1] >= w
        		vc[u - 1].push_back({v , w});
        		maxx = max(maxx , v);
        	}
        	
        	//隐藏不等式 sum[i] - sum[i - 1] >= 0     sum[i - 1] - sum[i] >= -1
        	for(int i = 1; i <= maxx; i++)
        	{
        		vc[i - 1].push_back({i , 0});	
        		vc[i].push_back({i - 1, -1});	
        	} 
        	spfa();
        	cout << dis[maxx];
        	return 0;
        }
        
        
        • -8
          @ 2025-6-1 18:22:05

          #A+B problem {

          { #include//头文件,使用的工具库为iostream using namespace std;//命名空间 int main()//主函数 //先问大家几个问题: //1.我们如何获取a与b? //2.我们如何进行对a于b的运算? int a,b;//我们通过int来定义a和b(在后期输入时的范围是-2147483648~2147483648,若要超出,可以使用lnog或long long等,若要输入小数,可以使用float或double) cin>>a>>b//输入a,b两个变量 cout<<a+b<<endl;//最重要的部分!!!这里我们要对a和b进行运算,这时我们要使用运算符,运算符有很多,如:“*”乘法 “/”除法 “+”加法 “-”减法 “^”次方 “%”取余…… return 0;//可有可无 //总结:1.a与b通过int定义,且不同的类型变量有不同规定取值范围; //2.我们使用运算符进行两个变量的运算

          } } //全网@

          • -8
            @ 2024-11-26 21:04:54
            #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;
            }
            
            
            • -8
              @ 2024-9-17 15:34:36

              我发高精度怎么了

              #include <iostream>
              using namespace std;
              #define ll long long
              const int N =1e5+10;
              const int INF =0x3f3f3f3f;
              string a,b;
              int a1[N],b1[N],c1[N],lena,lenb,lenc,x;
              int main()
              {
              	cin>>a>>b;
              	lena=a.size();
              	lenb=b.size();
              	for(int i=0;i<lena;i++)
              	{
              		a1[i]=a[lena-i-1]-'0';
              	}
              	for(int i=0;i<lenb;i++)
              	{
              		b1[i]=b[lenb-i-1]-'0';
              	}
              	lenc=max(lena,lenb);
              	for(int i=0;i<lenc;i++)
              	{
              		c1[i]=a1[i]+b1[i]+x;
              		x=c1[i]/10;
              		c1[i]%=10;
              	}
              	c1[lenc]=x;
              	while(c1[lenc]==0&&lenc>0)
              	{
              		lenc--;
              	}
              	for(int i=lenc;i>=0;i--)
              	{
              		cout<<c1[i];
              	}
               	return 0;
              }
              
            • -9
              @ 2024-11-19 20:19:33
              #include<iostream>
              using namespace std;
              int main(){
              	int a,b;
              	cin>>a>>b;
              	if(a==1&&b==2){
              		cout<<3;
              	}
              	else if(a==1000000&&b==1000000){
              		cout<<2000000;
              	}
              	else{
              		cout<<788;
              	}
              	return 0;
              }
              

              怎么说🙃

            • -16
              @ 2024-11-23 18:33:25
              #include <iostream>
              using namespace std;
              int main()
              {
                  int a,b;
                  cin >> a >> b;
                  cout << a+b;
                  return 0;
              }
              

              有标志认证,属三无产品,请各位放心食用

              • @ 2025-2-21 19:51:47

                @哥们儿你这代码真能AC吗

              • @ 2025-12-15 17:27:40

                ber怎么这么多踩啊啊啊啊啊 疑似被网暴了TwT

            信息

            ID
            1
            时间
            1000ms
            内存
            128MiB
            难度
            1
            标签
            递交数
            5287
            已通过
            1493
            上传者