• Codeforces Round #643 (Div. 2)


    比赛链接:https://codeforces.com/contest/1355

    A. Sequence with Digits

    题意

    给你第一个数和k,根据题中所给公式求出第k个数的值

    思路

    直接暴力,但中间会出现最大最小字符相乘为0的情况,然后break掉就不会超时了

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;
    ll mi,mx,n,k;
    void solve(ll a)
    {
    	mi=9,mx=0;
    	while(a)
    	{
    		mi=min(mi,a%10);
    		mx=max(mx,a%10);
    		a/=10;	
    	}	
    }
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>k;
    		for(int i=1;i<k;i++)
    		{
    			solve(n);
    			n+=mi*mx;
    			if(mi*mx==0) break;
    		}
    		cout<<n<<endl;
    	}
    	
    	return 0;
     }
     
    

    B. Young Explorers

    题意

    题中所给数组表示第i个人所在的组最少有(e_i)个人

    思路

    对数组中数的大小进行统计,然后分配

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 2e5+5;
    #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    ll t,n,a[N],num[N];
    
    int main()
    {
    	cin>>t;
    	while(t--){
    		cin>>n;
    		for(int i=1;i<=n;i++) num[i]=0;
    		for(int i=1;i<=n;i++){
    			cin>>a[i];
    			num[a[i]]++;
    		} 
    		ll ans=0,tmp=0;
    		for(int i=1;i<=n;i++){
    			ans+=(tmp+num[i])/i;
    			tmp=(tmp+num[i])%i;
    		}
    		cout<<ans<<'
    ';
    	}
    	
    	return 0;
     }
    

    C. Count Triangles

    题意

    三个数x,y,z的范围是A≤x≤B≤y≤C≤z≤D,求用该三条边最多可以构成三角形的个数

    思路

    x+y的取值范围在[A+B,B+C]中,但在这范围之间由于x,y取值的变化会存在某一个值重复出现的情况,所以还要考虑某一个数重复出现的次数,
    然后在[C,D]范围内找到第三条边满足构成三角形的情况,然后相乘即可

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    ll t,a,b,c,d;
     
    int main()
    {
    	cin>>a>>b>>c>>d;
    	ll ans=0,num;
    	ll l=d-c+1;
    	for(ll i=a+b;i<=b+c;i++){
    		if(i>a+b&&i<b+c){
    			num=min(i-(a+b)+1,(b+c)-i+1);
    			num=min(num,min(b-a+1,c-b+1));
    		}
    		else num=1; 
    		ll tmp=i-c;
    		tmp=max(0ll,tmp);
    		tmp=min(tmp,l);
    		ans+=(tmp*num);
    	}
    	cout<<ans<<'
    ';
    	
    	return 0;
     }
    

    D. Game With Array

    题意

    大小为n的数组和为s,问是否存在一个大小为n数组的子数组和为k

    思路

    观察可以发现s/n大于1就存在反之不存在,构建数组只要将前n-1项全赋值为1即可,然后k值取s/2就行,写完c时间不够了,没交上。。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 2e5+5;
    #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    ll n,s;
    
    int main()
    {
    	cin>>n>>s;
    	int num=s/n;
    	if(num>1){
    		puts("YES");
    		ll tmp=s;
    		for(int i=1;i<=n-1;i++){
    			cout<<"1 ";
    			s--;
    		}
    		cout<<s<<'
    ';
    		cout<<(tmp+1)/2<<'
    ';
    	}
    	else puts("NO");
    	
    	return 0;
     }
    
    七月在野,八月在宇,九月在户,十月蟋蟀入我床下
  • 相关阅读:
    <!DOCTYPE html>的重要性!
    ibatis 常用标签
    string.match(RegExp) 与 RegExp.exec(string) 深入详解
    JavaScript RegExp.$1
    JavaScript RegExp.exec() 方法
    正则表达式常用符号说明
    正则表达式中/i,/g,/ig,/gi,/m的区别和含义
    JavaScript Math.floor() 方法
    JavaScript RegExp.test() 方法
    js日期格式化 扩展Date()
  • 原文地址:https://www.cnblogs.com/voids5/p/12902757.html
Copyright © 2020-2023  润新知