【Atcoder】Atcoder Beginner Contest 50

   日期:2020-08-05     浏览:84    评论:0    
核心提示:总结:VP,1、2水题,3题一开始WA了,居然没有想到用快速幂,后来看了题解会了,T4暂时没看。T1: A - Addition and Subtraction Easy题意:求A+B A-B问题,输入两个数和操作符,求出结果思路:代码:#include using namespace std;int a,b;char op;int main(){ cin>>a>>op>>b; if(op==+) cout&l.

战况:VP,1、2水题,3题一开始WA了,居然没有想到用快速幂,后来看了题解会了,T4没看。目前ABC已补。缺D。

T1: A - Addition and Subtraction Easy

题意:求A+B A-B问题,输入两个数和操作符,求出结果

思路:

代码:

#include <iostream>
using namespace std;
int a,b;
char op;
int main(){
	cin>>a>>op>>b;
	if(op=='+') cout<<a+b;
	else cout<<a-b;
	return 0;
}

T2:B - Contest with Drinks Easy

题意:n个题目,分别需要Ti时间来解答;m个饮料,喝下会使得某题时间变成Pi;需要计算选择每个饮料后的总时间。

思路:数据范围 [ 1 − 100 ] [1 -100] [1100],可先求出所有题的解题时间和,然后在计算每种饮料时,减去该饮料所作用的题目的时间,加上该饮料作用后的时间

时间复杂度: O ( n ) O(n) O(n)

代码:

#include <iostream>
using namespace std;
const int N=110;
int t[N];
int sum;
int n,m;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>t[i];
		sum+=t[i];	
	}	
	
	cin>>m;
	while(m--){
		int i,v;
		cin>>i>>v;
		cout<<sum-t[i]+v<<endl;
	}
	return 0;
}

T3:C - Lining Up

题意:n个人编号1-n站成一排,每个人左边的人数和右边的人数的差的绝对值为Ai,求可能的站的方案数的个数;n范围1e5。方案数要取模1e9+7,没有这样的方案就输出0。

思路: 看了一下样例,感觉找到了规律啊:
1)如果n是奇数的话,那么一定有一个0(也就是站在中间),2,2,4,4,…,n-1,n-1,满足的话方案数为2^(n-1)/2
2)如果n是偶数的话,那么一定有1,1,3,3,5,5,n-1,n-1,满足的话方案数为2^n/2.不满足以上条件则为0
因为数可能会很大,所以要用到快速幂(一开始没用就WA了4个点了

代码:

#include <iostream>
#include <cmath>
using namespace std;
int mod=1e9+7;
typedef long long LL;
const int N=1e5+10;
int n, b[N];
int qmi(int a, int k,int p){
    int res=1;
    while(k){
        if(k&1) res=(LL)res*a%p;
        k>>=1;
        a=(LL)a*a%p;
    }
    return res;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		b[x]++;
	}
	
	if(n==1){
		if(b[1]!=0) cout<<0;
		else cout<<1;
		return 0;	
	} 
	
	if(n%2==0){
		bool is_ok=true;
		for(int i=0;i<=n-1;i++)
		{
			if(i%2==0)
			{
				if(b[i]!=0){
					is_ok=false;
					break;	
				}	
			}
			else{
				if(b[i]!=2){
					is_ok=false;
					break;	
				}
			} 
		}
		if(!is_ok) cout<<0;
		else cout<<qmi(2,n/2,mod);
	}else{
		bool is_ok=true;
		for(int i=0;i<=n-1;i++)
		{
			if(i==0){
				if(b[i]!=1){
					is_ok=false;
					break;
				}
			}
			else{
				if(i%2==0){
					if(b[i]!=2){
						is_ok=false;
						break;
					}
				}else{
					if(b[i]!=0){
						is_ok=false;
						break;
					}
				}
			}
		}
		if(!is_ok) cout<<0;
		else cout<<qmi(2,(n-1)/2,mod);
	}
	return 0;
}

T4- D - Xor Sum

TBD

题意:
思路:
代码:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服