ACM ICPC 2017 Warmup Contest 3

(假期第一次比较正式的一次队内练习赛)还是圳爷发挥好 现学凸包A题 弱鸡只能签道切个打表题

A 队友直接广搜A掉

C 按照一定规则染色 最终使每块颜色不同的最小花费

#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct cmp{
    bool operator()(ll x,ll y){
        return x>y;
    }
};
int main(){
    int T;scanf("%d",&T);
    int n;
    priority_queue<ll,vector<ll>,cmp >que;
    while(T--){
        scanf("%d",&n);
        ll aa;
        for(int i=1;i<=n;i++){
            scanf("%lld",&aa);que.push(aa);
        }
        long long ans=0;
        while(que.size()>1){
            ll t1=que.top();que.pop();ll t2=que.top();que.pop();
            ans+=(t1+t2);
            que.push(t1+t2);
        }
       while(!que.empty()) que.pop();
       printf("%lld\n",ans);
    }
    return 0;
}

 D 签到题

#include <bits/stdc++.h>
using namespace std;
int a[105];
typedef struct node{
    int x;int y;
    friend bool operator<(node a,node b){
        if(a.x==b.x) return a.y<b.y;
        return a.x>b.x;
    }
}node;
node b[105];
int main(){
    int n,m;cin>>n>>m;
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            a[i+j]++;
        }
    }
    int u=0;
    for(int i=2;i<=m+n;i++){
        if(a[i]!=0){
         b[++u].x=a[i];b[u].y=i;
        }
    }
    sort(b+1,b+u+1);
    printf("%d\n",b[1].y);
    for(int i=2;i<=u;i++){
        if(b[i].x==b[i-1].x){
            printf("%d\n",b[i].y);
        }
        else break;
    }
    return 0;
}

 F 网络流裸题 队友板子速切

   H 打表题 枚举AB串 统计所有满足的情况 排序二分即可(没注意Int会爆 WA了两发

#include <bits/stdc++.h>
using namespace std;
string a[64];
string b[64];
long long p[64];
long long vis[5005];
int pos;
long long zh(string c){
    long long sum=0;
    int t=c.size();
    for(int i=t-1;i>=0;i--){
        sum+=((c[i]-'0')*p[t-1-i]);
    }
    return sum;
}
long long pow(int x){
    long long sum=1;
    for(int i=1;i<=x;i++) sum*=2;
    return sum;
}
void csh(){
    pos=0;string s;
    for(int i=0;i<63;i++){
        vis[++pos]=zh(a[i]);
     for(int j=0;j<62;j++){
            int id=1;
         s=a[i];
         while(s.size()<64){
            if(id&1) {s+=b[j];id++;}
            else {s+=a[i];id++;}
            if(s.size()<64) vis[++pos]=zh(s);
          }
        s.clear();
       }
    }
}
int main(){
     a[0]="1";b[0]="0";
     for(int i=0;i<=63;i++) p[i]=pow(i);
     for(int i=1;i<=63;i++){
        a[i]=a[i-1]+"1";
        b[i]=b[i-1]+"0";
     }
     csh();
     sort(vis+1,vis+pos+1);
     long long n,m;cin>>n>>m;
     if(n==0&&m==0) cout<<0<<endl;
     else{
     int l=1;int r=pos;int ans1;
     while(l<=r){
            int mid=(l+r)>>1;
        if(vis[mid]>=n){
            ans1=mid;r=mid-1;
        }
        else  l=mid+1;
     }
     l=1;r=pos;int ans2;
     while(l<=r){
        int mid=(l+r)>>1;
        if(vis[mid]<=m){
            ans2=mid;l=mid+1;
        }
        else r=mid-1;
     }
     cout<<ans2-ans1+1<<endl;}
     return 0;
}

  

J 计算几何 队友说写个凸包 然后暴力判断即可

posted @ 2017-10-05 19:03  wang9897  阅读(223)  评论(0编辑  收藏  举报