2022/7/18 cf训练

Posted 钟钟终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022/7/18 cf训练相关的知识,希望对你有一定的参考价值。

Mocha and Railgun
本题是思路想错了,但是计算的方式是对的。还是应该回到长度最大是多少这个点来思考。点 Q绕原点旋转,从而使得电磁炮方向竖直向上(即 y 轴正方向),AB在OQ所对应的线段上。

代码:

#include <bits/stdc++.h>
#define int long long
#define endl '\\n'

using namespace std;
double r,x,y,d;
signed main()

    int t;cin>>t;
    while(t--)
        scanf("%lf%lf%lf%lf",&r,&x,&y,&d);
        double dis=sqrt(x*x+y*y);
        double ans=r*((acos((dis-d)/r))-acos((dis+d)/r));
        printf("%.12f\\n",ans);
    
    return 0;


B. Difference of GCDs
看错题意了,我说怎么检查为什么都是错。我以为l~r区间中每个数字只能使用一次,所以开了unordered_map来记录是否出现,强行给题目上了难度。。。可能是因为这段时间有难度的题目看多了

#include<bits/stdc++.h>
#define int long long
#define endl '\\n'
#define pii pair<int,int>
using namespace std;
const int N=1e6+6;
unordered_map<int,int>mp;
int n,l,r,ans[N];

signed main()

    int t;cin>>t;
    while(t--)
    
        mp.clear();
        cin>>n>>l>>r;
        int flag=0;
        for(int i=1;i<=n;i++)
        
            int k=l/i;
            while(mp[k*i]||k*i<l)
                k++;
            if(k*i<=r&&!mp[k*i])
                ans[i]=k*i,mp[k*i]=1;
            else
            
                flag=1;break;
            
        
        if(flag)
            cout<<"NO"<<endl;
        else
        
            cout<<"YES"<<endl;
            for(int i=1;i<=n;i++)
                cout<<ans[i]<<" ";
            cout<<endl;
        

    
    return 0;


ac代码:上述代码注释掉写的多余的map即可

#include<bits/stdc++.h>
#define int long long
#define endl '\\n'
#define pii pair<int,int>
using namespace std;
const int N=1e6+6;
//unordered_map<int,int>mp;
int n,l,r,ans[N];

signed main()

    int t;cin>>t;
    while(t--)
    
        //mp.clear();
        cin>>n>>l>>r;
        int flag=0;
        for(int i=1;i<=n;i++)
        
            int k=l/i;
            while(k*i<l)
                k++;
            if(k*i<=r)
                ans[i]=k*i;
            else
            
                flag=1;break;
            
        
        if(flag)
            cout<<"NO"<<endl;
        else
        
            cout<<"YES"<<endl;
            for(int i=1;i<=n;i++)
                cout<<ans[i]<<" ";
            cout<<endl;
        

    
    return 0;

A. Difference Operations
1.第一个数字若是1,则一定可以满足;
2.若后面2~n的每个数字都是a[1]的倍数也可以实现2 ~n全为0.

#include<bits/stdc++.h>
#define int long long
#define endl '\\n'
#define pii pair<int,int>
using namespace std;
const int N=1e6+6;
//unordered_map<int,int>mp;
int n,a[N];

signed main()

    int t;cin>>t;
    while(t--)
    
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        if(a[1]==1)
            cout<<"YES"<<endl;
        else
        
            int flag=0;
            for(int i=2;i<=n;i++)
            
                if(a[i]%a[1]!=0)
                
                    flag=1;break;
                
            
            if(flag)
                cout<<"NO"<<endl;
            else
                cout<<"YES"<<endl;
        
    
    return 0;


以上是关于2022/7/18 cf训练的主要内容,如果未能解决你的问题,请参考以下文章

2022/7/14 cf训练(思维+构造+差分)

CF1204E Natasha, Sasha and the Prefix Sums

8/17 牛客训练营9补题+cf(BC)

codeforces 杂题训练

题解 CF1354B Ternary String

题解 CF1354B Ternary String