zoukankan      html  css  js  c++  java
  • noip2012day1

    T1

    题解:
    这其实就是一个很简单的模拟,大家使劲按要求模拟就OK

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    string C;
    string K;
    int KeyK,KeyC;
    bool dxx[1010];
    int main(){
       cin>>K;
       cin>>C;
       for(int i=0;i<K.size();i++){
           if(K[i]>=97){
               K[i]-=32;
           }
       }
       for(int i=0;i<C.size();i++){
           if(C[i]>=97){
               C[i]-=32;
               dxx[i]=1;
           }
       }
       while(KeyC!=C.size()){
           char out;
           out=C[KeyC]-(K[KeyK]-'A');
           if(out<'A'){
               out+=26;
           }
           if(dxx[KeyC]){
               cout<<(char)(out+32);
           }
           else cout<<out;
           KeyC++;
           KeyK++;
           if(KeyK==K.size()){
               KeyK=0;
           }
       }
    }
    View Code

    T2

    题解:这道题是一道贪心题,大家只需要找到贪心策略是左手与右手的乘积,然后从小到大sort一下就OK了;(不过大家有一点需要小小注意一下,需要打一个高精度,要不然就只有60了)

    #include<bits/stdc++.h>
    #define MAXN 10005
    using namespace std;
    int a[10005],n,len,x,y;
    struct each{
       long long a,b;
    }use[10005];
    bool cmp(const each x,const each y){
       return x.a*x.b < y.a*y.b;
    }
    void m(int x){
       for(int i=1; i<=len; i++){
           a[i]*=x;
       }
       for(int i=1; i<=len; i++){
           if(a[i]>=10)
           {
               a[i+1]+=a[i]/10;
               a[i]%=10;
           }
           if(i==len&&a[i+1]!=0)len++;
       }
    }
    void d(int mod){
       int rest=a[len];
       int i;
       for(i=len-1; i>0; i--){
           if(rest>=mod)break;
           rest=rest*10+a[i];
       }
       if(rest<mod){
           printf("1");
           return;
       }
       while(i>0){
           printf("%d",rest/mod);
           rest%=mod;
           rest=rest*10+a[i--];
       }
       printf("%d",rest/mod);
    }
    int main(){
       cin>>n>>x>>y;
       for(long long i=1; i<=n; i++){
           scanf("%d%d",&use[i].a,&use[i].b);
       }
       sort(use+1,use+n+1,cmp);
       a[1]=x;
       len=1;
       for(int i=1; i<n; i++){
           m(use[i].a);
       }
       d(use[n].b);
       return 0;
    }
    View Code

    T3

    70分暴力

    题解:倍增Dp提前预处理出一个点走2i2i后的情况,对于寻找第一近和第二近的房子可以用map进行维护,每次找到最近的几个点,最后直接模拟即可

    #include<bits/stdc++.h>
    #define ll long long
    #define inf 10000000000
    using namespace std;
    ll n;
    ll X;
    ll H[100010];
    ll wheA[100010][2];
    ll wheB[100010][2];
    ll s,m;
    long double ans1=inf;
    ll read(){
       ll num=0,f=1;
       char ch;
       ch=getchar();
       while(ch>'9'||ch<'0'){
           if(ch=='-') f=-1;
           ch=getchar();
       }
       while(ch<='9'&&ch>='0'){
           num=(num<<3)+(num<<1)+ch-'0';
           ch=getchar();
       }
       return f*num;
    }
    long double dfs(ll S,ll x,bool who,ll AS,ll BS){
    //    if(AS+BS>S) return inf;
       if(x>=n){
           if(BS==0){
               return inf;
           }
           return (long double)AS/(long double)BS;
       }
       if(!who){
           if(AS+wheA[x][1]+BS<=S){
               return dfs(S,wheA[x][0],1,AS+wheA[x][1],BS);
           }
       }
       else {
           if(AS+wheB[x][1]+BS<=S){
               return dfs(S,wheB[x][0],0,AS,BS+wheB[x][1]);
           }
       }
       if(BS==0){
           return inf;
       }
       return (long double)AS/(long double)BS;
    }
    void dfs_(ll S,ll x,bool who,ll AS,ll BS){
       if(x>=n){
           printf("%lld %lld
    ",AS,BS);
           return;
       }
       if(!who){
           if(AS+wheA[x][1]+BS<=S){
               dfs_(S,wheA[x][0],1,AS+wheA[x][1],BS);
               return;
           }
       }
       else {
           if(AS+wheB[x][1]+BS<=S){
               dfs_(S,wheB[x][0],0,AS,BS+wheB[x][1]);
                return;
           }
       }
       printf("%lld %lld
    ",AS,BS);
    }
    int main(){
       n=read();
       for(ll i=1;i<=n;i++){
           H[i]=read();
       }
       H[n+1]=inf;
       for(ll i=1;i<=n-1;i++){
           ll x=i+1;
           ll y=i+2;
           ll t;
           if((abs(H[x]-H[i])>abs(H[y]-H[i]))||(((abs(H[x]-H[i])==abs(H[y]-H[i])))&&(H[y]-H[i]<0))) 
               swap(x,y);
           for(ll j=i+3;j<=n;j++){
               if((abs(H[x]-H[i])>abs(H[j]-H[i]))||(((abs(H[x]-H[i])==abs(H[j]-H[i])))&&(H[j]-H[i]<0))){
                   t=x;
                   x=j;
                   y=t;
                   continue;
               }
               if(((abs(H[x]-H[i])<abs(H[j]-H[i]))&&(abs(H[j]-H[i])<abs(H[y]-H[i])))||((abs(H[j]-H[i])==abs(H[y]-H[i]))&&(H[j]-H[i]<0))){
                   y=j;
                   continue;
               }
           }
           wheA[i][0]=y;
           wheA[i][1]=abs(H[y]-H[i]);
           wheB[i][0]=x;
           wheB[i][1]=abs(H[x]-H[i]);
       }
       X=read();
       for(ll i=1;i<n;i++){
           long double w=dfs(X,i,0,0,0);
           if(ans1>w||(ans1==w&&H[i]>H[s])){
               ans1=w;
               s=i;
           }
       }
       printf("%lld
    ",s);
       m=read();
       while(m--){
           int a,b;
           a=read();
           b=read();
           dfs_(b,a,0,0,0);
       }
    }
    View Code

      

  • 相关阅读:
    CHttpFile调试
    关于linux下网络编程socket 转换IP问题 inet_ntoa()
    vc使用SetTimer回调函数
    OpenGL+VC6.0开发环境搭建
    Java StringBuffer和StringBuilder类
    Java String类
    Java 异常处理
    hashcode()和equals()的作用、区别、联系
    抽象类可以继承实体类吗?
    Java 向上造型详解
  • 原文地址:https://www.cnblogs.com/Heartbeat358/p/12640507.html
Copyright © 2011-2022 走看看