• Bricks Gym


    #include<map>
    #include<queue>
    #include<time.h>
    #include<limits.h>
    #include<cmath>
    #include<ostream>
    #include<iterator>
    #include<set>
    #include<stack>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define rep_1(i,m,n) for(int i=m;i<=n;i++)
    #define mem(st) memset(st,0,sizeof st)
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef unsigned long long ull;
    typedef pair<double,double> pdd;
    const int N = 1e5 + 10;
    #define x first
    #define y second
    ll b,w,gcd1;
    ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
    ll ans;
    ll numb,numw;
    struct node
    {
    	ll num;
    	char c;
    } e[N];
    int n;
    void solve()
    {
    	scanf("%d",&n);
    	ll b=0;
    	ll w=0;
    	for(int i=1; i<=n; i++)
    	{
    		scanf("%lld %c",&e[i].num,&e[i].c);
    		if (e[i].c=='B')
    			b+=e[i].num;
    		else
    			w+=e[i].num;
    	}
    	if(b==0)
    		printf("%lld
    ",w);
    	else if(w==0)
    		printf("%lld
    ",b);
    	else
    	{
    		ll gcd1=gcd(b,w);
    		b/=gcd1,w/=gcd1;//最终的比
    		ll ans=0;
    		ll numb=0;
    		ll numc=0;
    		for(int i=1; i<=n; i++)
    		{
    			//如果是w  判断当前的B是否位最简比的倍数,如果是,判断能不能凑出w
    			if (e[i].c=='W')
    			{
    				//当前是最大公约数的几倍
    				ll beishu=numb/b;
    				//     当前的数是最大公约数的倍数
    				//					可以凑出当前倍数下的w
    				if (numb && numb%b==0 && w*beishu>=numw && w*beishu<=numw+e[i].num)
    				{
    					ans++;
    					numb=0;
    					numw=numw+e[i].num-w*beishu;
    				}
    				//凑不出来,就直接加
    				else
    					numw+=e[i].num;
    			}
    			//同理
    			else
    			{
    				ll beishu=numw/w;
    				if (numw && numw%w==0 && b*beishu>=numb && b*beishu<=numb+e[i].num)
    				{
    					ans++;
    					numw=0;
    					numb=numb+e[i].num-b*beishu;
    				}
    				else
    					numb+=e[i].num;
    			}
    		}
    		printf("%lld
    ",ans);
    	}
    }
    signed main()
    {
    	int t;
    	scanf("%d", &t);
    	while(t--)
    		solve();
    	return 0;
    }
    
  • 相关阅读:
    Chapter6 Commodity Forwards
    Chapter5 Prepaid Forwards
    个人作业5——软工个人总结
    软工网络15个人作业3
    软工网络15——结对编程
    软工网络15个人阅读作业2
    软工网络15个人阅读作业1 201521123080曾飞远
    Java课程设计 猜数游戏个人博客
    201521123080《Java程序设计》第14周学习总结
    201521123080《Java程序设计》第13周学习总结
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12867197.html
Copyright © 2020-2023  润新知