Codeforces Round#514 Div.2 翻车记

  A:签到

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 100010 
int n,l,m;
struct data{int x,y;
}a[N];
int main()
{
    n=read(),l=read(),m=read();
    for (int i=1;i<=n;i++)
    {
        int x=read(),y=read();
        a[i].x=x,a[i].y=x+y;
    }
    a[0].x=a[0].y=0,a[n+1].x=a[n+1].y=l;
    int ans=0;
    for (int i=1;i<=n+1;i++) ans+=(a[i].x-a[i-1].y)/m;
    cout<<ans;
    return 0;
}
View Code

  B:只能对于一个八个方向都被要求染色的位置染色。染完之后看一下和所要求的图是否相同就行了。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 1010
int n,m,a[N][N],b[N][N];
int main()
{
    n=read(),m=read();
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            char c=getchar();
            while (c!='#'&&c!='.') c=getchar();
            if (c=='#') a[i][j]=1;
            else a[i][j]=0;
        }
    }
    for (int i=1;i<=n;i++) 
        for (int j=1;j<=m;j++)
        if (a[i-1][j]&&a[i][j-1]&&a[i][j+1]&&a[i+1][j]&&a[i+1][j+1]&&a[i+1][j-1]&&a[i-1][j+1]&&a[i-1][j-1])
        b[i-1][j]=b[i][j-1]=b[i][j+1]=b[i+1][j]=b[i+1][j+1]=b[i+1][j-1]=b[i-1][j+1]=b[i-1][j-1]=1;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
        if (a[i][j]!=b[i][j]) {cout<<"NO";return 0;}
    cout<<"YES";
    return 0;
}
View Code

  C:要求字典序最大也就要求gcd的变化尽量早出现。如果n>=4,最容易使gcd增大的方法肯定是删掉所有奇数。所以递归删除即可。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 1000010
int n;
void print(int n,int s)
{
    if (n==1) {cout<<s;return;} 
    if (n==2) {cout<<s<<' '<<(s<<1);return;}
    if (n==3) {cout<<s<<' '<<s<<' '<<s*3;return;}
    for (int i=1;i<=(n+1)>>1;i++) printf("%d ",s);
    print(n>>1,s*2);
}
int main()
{
    n=read();
    print(n,1);
    return 0;
}
View Code

  D:二分圆半径,对于每个圆就可以求出它所要求的圆心所在区间,判断一下有没有交。然而不知道是写挂还是卡精度了,一个半小时都没搞出来,惨炸。

//wa on 5
#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
#define N 100010
int n;
long double eps=1E-8;
struct data{int x,y;
}a[N];
struct data2
{
    long double x;int op;
    bool operator <(const data2&a) const
    {
        return x<a.x;
    }
}b[N];
bool check(long double k)
{
    int t=0;
    for (int i=1;i<=n;i++)
    {
        if (2*k-a[i].y<0) return 0;
        long double x=sqrt(a[i].y)*sqrt(2*k-a[i].y);
        b[++t].x=a[i].x-x,b[t].op=1,b[++t].x=a[i].x+x+eps,b[t].op=-1;
    }
    sort(b+1,b+t+1);
    int cnt=0;
    for (int i=1;i<=t;i++)
    {
        cnt+=b[i].op;
        if (cnt==n) return 1;
    }
    return 0;
}
long double calc()
{
    long double l=0,r=2e18,ans=2e18;
    while ((r-l)/((r+l)/2)>eps)
    {
        long double mid=(l+r)/2;bool flag=1;
        if (check(mid)) ans=mid,r=mid-eps;
        else l=mid+eps;
    }
    return ans;
}
int main()
{
    n=read();
    long double flag1=0,flag2=0;
    for (int i=1;i<=n;i++)
    {
        a[i].x=read(),a[i].y=read();
        if (a[i].y<0) flag2=1;
        if (a[i].y>1) flag1=1;
    }
    if (flag1&&flag2) {cout<<-1;return 0;}
    if (flag2) for (int i=1;i<=n;i++) a[i].y=-a[i].y;
    double ans=calc();printf("%.7lf",ans);
    return 0;
}
View Code

  E:好像很多人过然而还并没有看。

  result:rank 329 rating -14

原文地址:https://www.cnblogs.com/Gloid/p/9746489.html