codeforces edu 106(div2 A-D)

A. Domino on Windowsill

#include<bits/stdc++.h>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		int n,k1,k2,w,b;
		cin>>n>>k1>>k2;
		cin>>w>>b;
		int k3 = min(k1,k2);
		int k4 = max(k1,k2);
		int mw = k3+(k4-k3)/2;
		k3 = min(n-k1,n-k2);
		k4 = max(n-k1,n-k2);
		int mb = k3+(k4-k3)/2;
		if(mw>=w&&mb>=b)
		cout<<"YES"<<endl;
		else
		cout<<"NO"<<endl;
	}
}

B. Binary Removals

因为只能00|11一个数字,所以记录最晚出现00,和最早11的位置,如果11的位置小于00的位置则,no

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		string str;
		cin>>str;
		int n=str.length();
		int pos1=0;
		int pos2=n-1;
		for(int i=0;i<n-1;i++)
		{
			if(str[i]=='0'&&str[i+1]=='0')
			{
				pos1=i;	
			}
		}
		for(int i=n-1;i>=0;i--)
		{
			if(str[i]=='1'&&str[i+1]=='1')
			{
				pos2=i;	
			}
		}
//		cout<<pos1<<" "<<pos2<<endl;
		if(pos2>=pos1)
		cout<<"YES"<<endl;
		else
		cout<<"NO"<<endl;
	}
}

C. Minimum Grid Path

简单分析题意,最后一个必然是拉满的,然后在这个之前,另一个方向的最小值也是拉满的

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
typedef long long ll;
ll a[N];
ll sum[N];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		int cnt=0,cnt1=0;
		
		for(int i=1;i<=n;i++)
		{
			sum[i]=0;
			cin>>a[i]; 
		}
		ll ma=a[1]*n+a[2]*n;
		ll cn1=1,cn2=1;
		ll mina=a[1],minb=a[2];
		ll sum1=a[1],sum2=a[2];
		//不是说取最后两项,而是取最小 
		for(int i=3;i<=n;i++)
		{
			ll total;
			if(i&1)
			{
				mina=min(mina,a[i]);
				total=sum1+sum2+(n-cn1)*mina+(n-cn2)*minb;	
				cn1++;
				sum1+=a[i];
			}
			else
			{
				minb=min(minb,a[i]);
				total=sum1+sum2+(n-cn1)*mina+(n-cn2)*minb;
				cn2++;
				sum2+=a[i];
			}
			ma=min(ma,total);
		}
		cout<<ma<<endl;
	}
}

D. The Number of Pairs

详细推导见:https://blog.csdn.net/weixin_45676038/article/details/115003991?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161625146916780264023636%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161625146916780264023636&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-6-115003991.pc_v2_rank_blog_default&utm_term=codeforces+Round+106

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e7+5;
int visit[N]={0};
int cn[N]={0};
vector<int> ve;
void prime_count()//求质因子的个数 
{
	cn[1]=0;
	for(int i=2;i<=N;i++)
	{
		if(visit[i])
		continue;
		else//i是素数 
		{
			cn[i]=1;
			visit[i]=1;
			for(int j=i+i;j<=N;j+=i)
			{
				visit[j]=1;
				cn[j]++;
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	prime_count();
	int t;
	cin>>t;
	while(t--)
	{
		ve.clear();
		int c,d,n;
		cin>>c>>d>>n;
		for(int i=1;i*i<=n;i++)
		{
			if(n%i==0)
			{
				if((i+d)%c==0)
				{
					ve.push_back((i+d)/c);
				}
				if(n/i==i)
					continue;
				if((n/i+d)%c==0)
				{
					ve.push_back((n/i+d)/c);
				}
			}
		}
		ll ans=0;
		for(int i=0;i<ve.size();i++)
		{
			ans+=(1<<(cn[ve[i]]));
		}
		cout<<ans<<endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值