2018-ICPC-焦作区预赛

开个新坑,希望这套题,能在时间无限的情况下题数达到金牌,缓慢更新中。

A:水中之水

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <iostream>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn=1e4+10;
char s[5][1000]={"Typically Otaku","Eye-opener","Young Traveller","Excellent Traveller","Contemporary Xu Xiake"};;

int main()
{
    
    int T;
    cin>>T;
    while(T--)
    {
        int t=0;
        for(int i=0;i<4;i++)
        {
            int b;cin>>b;
            if(b!=0)
                t++;
        }
        cout<<s[t]<<endl;
    }
    
}
 

 I:左右横跳即可

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <iostream>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn=1e5+10;
ll a[maxn],pre[maxn];
int main()
{
    
    int T;
    cin>>T;
    while(T--)
    {
        int n=0;
        cin>>n;
        for(int i=1;i<n;i++){
            cin>>a[i];
            a[i]+=a[i-1];
            pre[i]=pre[i-1]+a[i];
        }
        ll ans=0;
        cout<<0<<" ";
        int l=0,r=n;
        for(int i=1;i<n;i++)
        {
            if(i%2==0)
            {
                l++;
                ans+=pre[n-1]-pre[r-1]-pre[l-1];
            }
            else
            {
                r--;
                ans+=a[r];
                ans+=pre[n-1]-pre[r]-pre[l];
            }
            cout<<ans;
            if(i==n-1)
                cout<<endl;
            else
                cout<<" ";
        }
    }
    
}
 

 D:用手机模拟一下跑车即可做出来啦!

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <iostream>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn=1e5+10;
int main()
{
    
    int T;
    cin>>T;
    while(T--)
    {
        double a,b,r,d,pai=acos(-1);
        cin>>a>>b>>r>>d;
        d=pai/180*d;
        double jiao=atan(b/(a+r));
        double R=sqrt(b*b+(r+a)*(r+a));
        if(d>jiao)
        {
            printf("%.12lf
",R-r);
        }
        else
        {
            jiao=jiao-d;
            double ans=(R*cos(jiao)-r);
            printf("%.12lf
",ans);
        }
    }
    
}
 

 E: 猜一手结论

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <iostream>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn=2e2+10;
struct dashu
{
    int s[maxn*5];
    int flag,len;
    void ini()
    {
        memset(s, 0, sizeof s);
        flag=len=1;
    }
    void pri()
    {
        for(int i=0;i<len;i++)
        {
            printf("%c",s[len-i-1]+'0');
        }
    }
    void jinwei()
    {
        for(int i=0;i<len;i++)
        {
            if(s[i]>9)
            {
                s[i+1]+=s[i]/10;
                s[i]=s[i]%10;
                len=max(i+2,len);
            }
        }
    }
};
bool cmp(dashu d1,dashu d2)
{
    if(d1.flag==1&&d2.flag==1)
    {
        if(d1.len>d2.len)
            return 0;
        else if(d1.len<d2.len)
            return 1;
        else
        {
            int len=d1.len;
            for(int i=0;i<len;i++)
                if(d1.s[len-1-i]<d2.s[len-1-i])
                    return 1;
                else if(d1.s[len-1-i]>d2.s[len-1-i])
                    return 0;
            return 1;
        }
    }
    else if(d1.flag==-1&&d2.flag==-1)
    {
        if(d1.len>d2.len)
            return 1;
        else if(d1.len<d2.len)
            return 0;
        else
        {
            int len=d1.len;
            for(int i=0;i<len;i++)
                if(d1.s[len-1-i]<d2.s[len-1-i])
                    return 0;
                else if(d1.s[len-1-i]>d2.s[len-1-i])
                    return 1;
            return 1;
        }
    }else if(d1.flag==1&&d2.flag==-1)
    {
        return 0;
    }else if(d1.flag==-1&&d2.flag==1)
    {
        return 1;
    }
    return 1;
}
dashu add(dashu d1,dashu d2)
{
    dashu ans;
    ans.ini();
    if((d1.flag==1&&d2.flag==1)||(d1.flag==-1&&d2.flag==-1))
    {
        int len=max(d1.len,d2.len);
        for(int i=0;i<len;i++)
            ans.s[i]=d1.s[i]+d2.s[i];
        ans.len=len;
        ans.flag=d1.flag;
        ans.jinwei();
    }
    return ans;
}
dashu mul(dashu d1,dashu d2)
{
    dashu ans,t;
    ans.ini();
    t.ini();
    ans.flag=d1.flag*d2.flag;
    for(int i=0;i<d1.len;i++)
    {
        int chengzi=d1.s[i];
        t.ini();
        t.len=i+d2.len;
        for(int j=0;j<d2.len;j++)
        {
            t.s[i+j]=chengzi*d2.s[j];
        }
        t.jinwei();
        ans=add(ans, t);
    }
    if(ans.s[ans.len-1]==0)
        d1.pri();
    return ans;
}
dashu zhuanhuan(int n)
{
    dashu t2;
    t2.ini();
    for(int j=0;n!=0;j++)
    {
        t2.s[j]=n%10;
        n/=10;
        t2.len=j+1;
    }
     if(t2.s[t2.len-1]==0)
         cout<<n<<endl;
    return t2;
}
char n[maxn];
vector<int> prime;
int tong[maxn];
int main()
{
    for(int i=2;;i++)
    {
        int flag=0;
        for(int j=2;j<=sqrt(i);j++)
        {
            if(i%j==0)
            {
                flag=1;
                break;
            }
        }
        if(!flag)
            prime.push_back(i);
        if(prime.size()>100)
            break;
    }
    int T;
    cin>>T;
    
    while(T--)
    {
        memset(tong, 0, sizeof tong);
        cin>>n;
        dashu N;
        N.ini();
        int len=strlen(n);
        for(int i=0;i<len;i++)
        {
            N.s[len-1-i]=n[i]-'0';
        }
        N.len=len;
        
        dashu t;
        t.ini();
        t.s[0]=1;
        t.len=1;
        for(int i=0;;i++)
        {
            int p=prime[i];
            dashu t2=zhuanhuan(p);
            t=mul(t2, t);
            if(cmp(t, N))
            {
                tong[i]--;
                p=prime[i]+1;
                for(int j=0;prime[j]<=p;j++)
                {
                    while(p%prime[j]==0)
                    {
                        p/=prime[j];
                        tong[j]++;
                    }
                }
            }
            else
                break;
        }
        dashu ans1,ans2;
        ans1.ini();
        ans2.ini();
        ans1.s[0]=1;
        ans2.s[0]=1;
        for(int i=0;i<maxn;i++)
        {
            if(tong[i]==-1)
            {
                ans1=mul(ans1, zhuanhuan(prime[i]));
//                ans1.pri();
//                cout<<endl;
            }
            else
            {
                while (tong[i]!=0) {
                    ans2=mul(ans2, zhuanhuan(prime[i]));
                    tong[i]--;
//                    ans2.pri();
//                    cout<<endl;
                }
            }
        }
        ans1.pri();
        cout<<"/";
        ans2.pri();
        cout<<endl;
    }
}
 

 F:就考虑怎么处理数据就行了,然后最短路,但是getline的速度太慢了,被卡了很久

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <iostream>
#include <queue>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn=1e3+10;
char s[maxn*6][maxn*6];
vector<P> G[maxn][maxn];
int used[maxn][maxn];

P S,T;
int count1=0;
void L(int x,int y)
{
    int xx=2+4*(x-1);
    if(y%2==0)
    {
        xx+=2;
    }
    int yy=4+6*(y-1);
    if(s[xx][yy]=='S')
        S=make_pair(x, y);
    if(s[xx][yy]=='T')
        T=make_pair(x, y);
    if(s[xx-2][yy]==' ')
        G[x][y].push_back(make_pair(x-1, y));
    if(s[xx+2][yy]==' ')
        G[x][y].push_back(make_pair(x+1, y));
    
    if(y%2==0)
    {
        if(s[xx-1][yy-3]==' ')
            G[x][y].push_back(make_pair(x, y-1));
        if(s[xx-1][yy+3]==' ')
            G[x][y].push_back(make_pair(x, y+1));
        if(s[xx+1][yy-3]==' ')
            G[x][y].push_back(make_pair(x+1, y-1));
        if(s[xx+1][yy+3]==' ')
            G[x][y].push_back(make_pair(x+1, y+1));
    }
    else
    {
        if(s[xx-1][yy-3]==' ')
            G[x][y].push_back(make_pair(x-1, y-1));
        if(s[xx-1][yy+3]==' ')
            G[x][y].push_back(make_pair(x-1, y+1));
        if(s[xx+1][yy-3]==' ')
            G[x][y].push_back(make_pair(x, y-1));
        if(s[xx+1][yy+3]==' ')
            G[x][y].push_back(make_pair(x, y+1));
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        count1+=n*m;
        if(count1>2e6)
        return 0;
        getchar();
        char c;
        int i=0;
        while((c=getchar())!='
')
        {
            s[0][i]=c;
            i++;
        }
        for(int i=0;i<n;i++)
        {
            for(int j=i*4+1;j<i*4+4+1;j++)
            {
                int k=0;
                while((c=getchar())!='
')
                {
                    s[j][k]=c;
                    k++;
                }
            }
        }
        int k=0;
        while((c=getchar())!='
')
        {
            s[4*n+1][k]=c;
            k++;
        }
        k=0;
        while((c=getchar())!='
')
        {
            s[4*n+2][k]=c;
            k++;
        }
        
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                used[i][j]=0;
                G[i][j].clear();
                L(i,j);
            }
        
        used[S.first][S.second]=1;
        queue<P> q;
        q.push(S);
        int flag=0;
        while(!q.empty())
        {
            P t=q.front();
            q.pop();
            int x=t.first,y=t.second;
            for(int i=0;i<G[x][y].size();i++)
            {
                int nx=G[x][y][i].first,ny=G[x][y][i].second;
                if(used[nx][ny]==0)
                {
                    used[nx][ny]=used[x][y]+1;
                    if(nx==::T.first&&ny==::T.second)
                    {
                        flag=1;
                        break;
                    }
                    q.push(make_pair(nx, ny));
                }
            }
            if(flag)
                break;
        }
        
        if(used[::T.first][::T.second]==0)
        {
            printf("-1
");
        }
        else
        {
            printf("%d
",used[::T.first][::T.second]);
        }
    }
}

 B:分类讨论中的好题

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <iostream>
#include <queue>
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
const int maxn=4e5+10;
P J(ll hp,ll f)
{
    ll l=0,r=1e5;
    while (l<r-1) {
        ll mid=(r+l)/2;
        if(mid*(mid+f-1+f)/2<hp)
            l=mid;
        else
            r=mid;
    }
    return make_pair(r, r*(r+1)/2-hp);
}
int main()
{
    int T;
    cin>>T;
    while (T--) {
        ll hpa,hpb,atka,atkb;
        cin>>hpa>>hpb>>atka>>atkb;
        ll shanghai1=0,shanghai2=0;
        P t1=J(hpa,1),t2=J(hpb,1);
        P t2b=J(hpb-t1.second,t1.first+1),t2a=J(hpa-t2.second,t2.first+1);
        shanghai1=t1.first*(atkb+atka)+t2b.first*atkb;
        shanghai2=t2.first*(atka+atkb)+t2a.first*atka;
        vector<char> ans1,ans2;
        if(shanghai1<=shanghai2)
        {
            ll b_top=hpb-t2b.first*(t2b.first+t1.first+1+t1.first)/2,a_top=t1.second;
            
            for(int t=1;t<=t1.first;)
            {
                if(t==a_top&&b_top>0){
                    ans1.push_back('B');
                    t++;
                }
 
                ans1.push_back('A');
                t++;
            }
            for(int i=0;i<t2b.first;i++)
                ans1.push_back('B');
            
        }
        
        if(shanghai1>=shanghai2)
        {
            ll b_top=t2.second,a_top=hpa-t2a.first*(t2a.first+t2.first+1+t2.first)/2;
            for(int t=1;t<=t2.first;)
            {
                while((b_top-t>t)||(a_top-t<=0&&t<=b_top))
                {
                    ans2.push_back('A');
                    b_top-=t;
                    a_top-=t;
                    t++;
                }
                ans2.push_back('B');
                t++;
            }
            
            for(int i=0;i<t2a.first;i++)
                ans2.push_back('A');
            
        }
        if(ans1.size()!=0&&ans2.size()!=0)
        {
            for(int i=0;i<ans1.size();i++)
            {
                if(ans1[i]<ans2[i])
                {
                    cout<<shanghai1<<" ";
                    for(int i=0;i<ans1.size();i++)
                        cout<<ans1[i];
                    cout<<endl;
                    break;
                }
                else if(ans1[i]>ans2[i])
                {
                    cout<<shanghai2<<" ";
                    for(int i=0;i<ans2.size();i++)
                        cout<<ans2[i];
                    cout<<endl;
                    break;
                }
            }
        }else if(ans1.size()!=0)
        {
            cout<<shanghai1<<" ";
            for(int i=0;i<ans1.size();i++)
                cout<<ans1[i];
            cout<<endl;
        }
        else if(ans2.size()!=0)
        {
            cout<<shanghai2<<" ";
            for(int i=0;i<ans2.size();i++)
                cout<<ans2[i];
            cout<<endl;
        }
    }
}
 
原文地址:https://www.cnblogs.com/King-of-Dark/p/12410983.html