67 条题解

  • -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;
    }
    
    
    • -7
      @ 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;
      }
      
      
      • -7
        @ 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.我们使用运算符进行两个变量的运算

        } } //全网@

        • -7
          @ 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;
          }
          
          
          • -7
            @ 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;
            }
            
          • -8
            @ 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;
            }
            

            怎么说🙃

          • -15
            @ 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
          标签
          递交数
          5282
          已通过
          1491
          上传者