AtCoder Beginner Contest 139

A

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
    char in;bool IsN=false;
    in=getchar();
    if(in==EOF) return false;
    while(in!='-'&&(in<'0'||in>'9')) in=getchar();
    if(in=='-'){ IsN=true;num=0;}
    else num=in-'0';    
    while(in=getchar(),in>='0'&&in<='9'){
            num*=10,num+=in-'0';
    } 
    if(IsN) num=-num;
    return true;
}
int main(){
    //freopen("1.in", "r", stdin);
    string a,b;
    cin>>a>>b;
    int ans=0;
    for(int i=0;i<3;i++){
        if(a[i]==b[i]) ans++;
    }
    cout<<ans<<endl;
    return 0;
}

B

暴力

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
    char in;bool IsN=false;
    in=getchar();
    if(in==EOF) return false;
    while(in!='-'&&(in<'0'||in>'9')) in=getchar();
    if(in=='-'){ IsN=true;num=0;}
    else num=in-'0';
    while(in=getchar(),in>='0'&&in<='9'){
            num*=10,num+=in-'0';
    } 
    if(IsN) num=-num;
    return true;
}
int main(){
    //freopen("1.in", "r", stdin);
    ll a,b;
    cin>>a>>b;
    for(int i=0;;i++){
        if(a*i-(i-1)>=b){
            cout<<i<<endl;
            return 0;
        }
    }
    return 0;
}

C

O ( n ) O(n) O(n)的维护最大值即可。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
    char in;bool IsN=false;
    in=getchar();
    if(in==EOF) return false;
    while(in!='-'&&(in<'0'||in>'9')) in=getchar();
    if(in=='-'){ IsN=true;num=0;}
    else num=in-'0';
    while(in=getchar(),in>='0'&&in<='9'){
            num*=10,num+=in-'0';
    } 
    if(IsN) num=-num;
    return true;
}
int L[N],R[N],a[N];
int main(){
    //freopen("1.in", "r", stdin);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    int ans=0;
    int cnt=1;
    int now=a[1];
    for(int i=2;i<=n;i++){
        if(a[i]<=now){
            cnt++;
            now=a[i];
        }
        else{
            ans=max(ans,cnt);
            cnt=1;
            now=a[i];
        }
    }
    ans=max(ans,cnt);
    cout<<ans-1<<endl;
    return 0;
}

D

答案为 ( n − 1 ) ⋅ n 2 \frac{(n-1)\cdot n}{2} 2(n1)n

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
    char in;bool IsN=false;
    in=getchar();
    if(in==EOF) return false;
    while(in!='-'&&(in<'0'||in>'9')) in=getchar();
    if(in=='-'){ IsN=true;num=0;}
    else num=in-'0';
    while(in=getchar(),in>='0'&&in<='9'){
            num*=10,num+=in-'0';
    } 
    if(IsN) num=-num;
    return true;
}
ll a[N];
int main(){
    //freopen("1.in", "r", stdin);
    ll n;
    cin>>n;
    n--;
    cout<<n*(n+1)/2<<endl;
    return 0;
}

E

直接用队列模拟即可。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
    char in;bool IsN=false;
    in=getchar();
    if(in==EOF) return false;
    while(in!='-'&&(in<'0'||in>'9')) in=getchar();
    if(in=='-'){ IsN=true;num=0;}
    else num=in-'0';
    while(in=getchar(),in>='0'&&in<='9'){
            num*=10,num+=in-'0';
    } 
    if(IsN) num=-num;
    return true;
}
queue<int> G[N];
int maxx[N];
bool vis[N];
ll a[2000][2000];
int main(){
   //freopen("1.in", "r", stdin);
    ll n;
    read(n);
    rep(i,1,n){
        maxx[i]=0;
        rep(j,1,n-1){
            read(a[i][j]);
            G[i].push(a[i][j]);
        }
    }
    int ans=0;
    while(1){
        bool flag=0;
        rep(i,1,n){
            if(G[i].empty()) continue;
            if(G[G[i].front()].front()==i){
                maxx[i]=maxx[G[i].front()]=max(maxx[i],maxx[G[i].front()])+1;
                G[G[i].front()].pop();
                G[i].pop();
                flag=1;
            }
        }
        if(flag==0){
            cout<<-1<<endl;
            return 0;
        }
        ll num=0;
        rep(i,1,n){
            num+=G[i].size();
        }
        if(num==0){
            break;
        }
    }
    rep(i,1,n){
        ans=max(ans,maxx[i]);
    }
    cout<<ans<<endl;
    return 0;
}

F

极角排序后枚举起点更新最大值。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+100;
const int mod = 1e9+7;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll llINF = 0x3f3f3f3f3f3f3f3f;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
inline bool read(ll &num) {
    char in;bool IsN=false;
    in=getchar();
    if(in==EOF) return false;
    while(in!='-'&&(in<'0'||in>'9')) in=getchar();
    if(in=='-'){ IsN=true;num=0;}
    else num=in-'0';
    while(in=getchar(),in>='0'&&in<='9'){
            num*=10,num+=in-'0';
    } 
    if(IsN) num=-num;
    return true;
}
struct point{
    double x,y;
}s[N];
bool cmp(point a,point b){
    if(atan2(a.y,a.x)!=atan2(b.y,b.x)){
        return atan2(a.y,a.x)<atan2(b.y,b.x);
    }
    return a.x<b.x;
}
int main(){
    //freopen("1.in", "r", stdin);
    ll n;
    read(n);
    rep(i,1,n){
        cin>>s[i].x>>s[i].y;
    }
    sort(s+1,s+n+1,cmp);
    rep(i,n+1,2*n) s[i]=s[i-n];
    double ans=0;
    rep(i,1,n){
        double xx=0;
        double yy=0;
        rep(j,i,i+n-1){
            xx+=s[j].x;
            yy+=s[j].y;
            ans=max(ans,xx*xx+yy*yy);
        }
    }
    printf("%.15lf\n",sqrt(ans));
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值