Codeforces Round #655 (Div. 2)ABC(B为数学)

A:http://codeforces.com/contest/1372/problem/A

解析:

没得说,没想到这次A这么简单,全输出1就行了

#include<cstdio>
#include<stack>
#include<map>
#include<set>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
priority_queue<int,vector<int>,greater<int> > q;//ó??è?aD?μ?ó??è?óáD 
typedef long long ll;
const int maxn=1e3+20;
int a[maxn],b[maxn];
int pos[maxn];
int top=0;
int ok=0;
int vis[maxn];
    int n,k;
struct node
{
    int x,id;
}st[maxn];
bool cmp(node a , node b)
{
    if(a.x==b.x)
        return a.id<b.id;
    return a.x<b.x;
}
bool check()
{
    for(int i=1;i<n;i++)
    {
        if(a[i]>a[i+1])
            return true;
    }
    return false;
}
int main()
{    // 4 0 20

    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
            cout<<"1 ";
            cout<<endl;
    }
}

B:http://codeforces.com/contest/1372/problem/B

题意:

给出n

找出a,b。满足a+b=n,lcm(a,b)是最小的

解析:

a*b/gcd(a,b)=lcm(a,b)

lcm最小,那么gcd最大

如果a,b互质,那么gcd为1,所以对于n为非素数的情况,需要找出n的最大因子a

a为n的因子,那么n-a也为n的因子

满足了:

max gcd=gcd(a,n-a)=a

min  lcm=lcm(a,n-a)=n-a

#include<cstdio>
#include<stack>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
priority_queue<int,vector<int>,greater<int> > q;//ó??è?aD?μ?ó??è?óáD 
typedef long long ll;
const int maxn=1e3+20;
int a[maxn],b[maxn];
int pos[maxn];
int top=0;
int ok=0;
int vis[maxn];
    int n,k;
struct node
{
    int x,id;
}st[maxn];
bool cmp(node a , node b)
{
    if(a.x==b.x)
        return a.id<b.id;
    return a.x<b.x;
}
int main()
{    // 4 0 20
    int t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        int ok =  0;
        ll md;
        for(int i=2;i<=sqrt(n);i++)
        {
            if(n%i==0)
            {
                md=n/i;ok=1;break;
            }
        }
        if(!ok)
            cout<<"1 "<<n-1<<endl;
        else
            cout<<md<<" "<<n-md<<endl;
    }

}

C:http://codeforces.com/contest/1372/problem/C

题意:

给出长度为n的数组,含数字1~n

操作:

找出[l,r],对区间内的数字进行任意排序,条件是任何一位不能和排序之前相同

求最少操作数,使得数组变为:1,2,3....n

解析:

求初始数组ai==i的数目tot

tot==n:0

tot==0:1(此时对整个区间进行一次排序即可恢复)

0<tot<n:

分两种情况

(1) 正常...乱序...正常

这个时候,只需要把乱序部分进行一次排序,即可恢复,所以只需要1次操作。

(2)正常...乱序正常乱序...正常

中间发生了交替,那么先把整个区间进行一次操作,打乱它们,然后再对整个区间重排,即可恢复。操作数为2次。

#include<cstdio>
#include<stack>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
priority_queue<int,vector<int>,greater<int> > q;//ó??è?aD?μ?ó??è?óáD 
typedef long long ll;
const int maxn=2e5+20;
int a[maxn],b[maxn];
int pos[maxn];
int top=0;
int ok=0;
int vis[maxn];
    int n,k;
struct node
{
    int x,id;
}st[maxn];
bool cmp(node a , node b)
{
    if(a.x==b.x)
        return a.id<b.id;
    return a.x<b.x;
}
int main()
{    // 4 0 20
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int ok = 0;
        int tot=0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            if(a[i]!=i)
                {
                    tot++;
                }
        }
        if(tot==0)
            cout<<"0"<<endl;
        else if(tot==n)
            cout<<"1"<<endl;
        else
            {
                int l=1,r=n;
                for(int i=1;i<=n;i++)
                {
                    if(a[i]!=i)
                        break;
                    l++;
                }
                for(int i=n;i>=1;i--)
                {
                    if(a[i]!=i)
                        break;
                    r--;
                }
                int ok =0;  // l之前,r之后,均为有序。
                for(int i=l+1;i<=r-1;i++)
                {
                    if(a[i]==i)
                    {
                        ok=1;break;
                    }
                }
            //    cout<<l<<"-"<<r<<endl;
                if(ok)
                    cout<<"2"<<endl;
                else
                    cout<<"1"<<endl;
            }
    }

}

 

posted @ 2020-07-12 22:31  liyexin  阅读(174)  评论(0编辑  收藏  举报