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\n",R-r); } else { jiao=jiao-d; double ans=(R*cos(jiao)-r); printf("%.12lf\n",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())!='\n')
        {
            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())!='\n')
                {
                    s[j][k]=c;
                    k++;
                }
            }
        }
        int k=0;
        while((c=getchar())!='\n')
        {
            s[4*n+1][k]=c;
            k++;
        }
        k=0;
        while((c=getchar())!='\n')
        {
            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\n");
        }
        else
        {
            printf("%d\n",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; } } }

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号