zoukankan      html  css  js  c++  java
  • 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛)

    C:

    很简单一道签到题,3不用管,把1和2先尽可能合并掉,然后剩下的自己合并。

    打的时候2合并了两次一直算成代价2,死活过不去        本周+5道罚题

    下附代码:

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 int main(){
     5     ll a,b,c;
     6     scanf("%lld%lld%lld",&a,&b,&c);
     7     if (a==b){
     8         ll ret=a*2;
     9         printf("%lld",ret);
    10     }
    11     else if (a>b){
    12         ll ret=b*2;
    13         a-=b;
    14         ret+=3*(a/3);
    15         if (a%3==2) ret+=1;
    16         printf("%lld",ret);
    17     }
    18     else {
    19         ll ret=a*2;
    20         b-=a;
    21         ret+=6*(b/3);
    22         if (b%3==2) ret+=4;
    23         printf("%lld",ret);
    24     }
    25 }
    View Code

    D:

    排序完之后按照相同的R作为等级,按照L赋值。

    题目里说了排名大等于原来,也就是说本来要差的几个人往前面并列是可以接受的,打的时候没看见,wa了好久。

    再加+5罚题

    下附代码:

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 struct node{
     5     ll l,r,w;
     6 }a[100005];
     7 bool cmp(node x,node y){
     8     return x.r<y.r;
     9 }
    10 int main(){
    11     int n;
    12     scanf("%d",&n);
    13     for(int i=1;i<=n;i++){
    14         scanf("%lld%lld",&a[i].l,&a[i].r);
    15     }
    16     sort(a+1,a+1+n,cmp);
    17     ll sum=0;
    18     ll maxl=0;
    19     a[0].r=a[1].r-1;
    20     ll num=0;
    21     a[n+1].r=a[n].r+1;
    22     for(int i=1;i<=n+1;i++){
    23         if(a[i].r!=a[i-1].r){
    24             sum+=num*maxl;
    25             maxl=max(maxl,a[i].l);
    26             num=1;
    27         }
    28         else {
    29             maxl=max(1ll*a[i].l,maxl);
    30             num++;
    31         }
    32     }
    33     printf("%lld
    ",sum);
    34 }
    View Code

    L:

    数位DP,处理出除了后七位以外其他的1的奇偶性以及进位后的奇偶性,然后直接枚举找答案。

    下附代码:

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 ll dp[100][2][2],a[105];
     5 ll dim[100];
     6 ll m,l;
     7 ll cal(int jb,int sum,int st){
     8     ll ret=0,maxn=127;
     9     if (jb) maxn=l%128;
    10     for (int i=0; i<=maxn; i++){
    11         int flag=1;
    12         for (int j=0; j<m; j++){
    13             if (i+j<128){
    14                 if ((__builtin_parity(i+j)^sum)!=a[j]){
    15                     flag=0;
    16                     break;
    17                 }
    18             }
    19             else if ((__builtin_parity(i+j)^sum^st)!=a[j]){
    20                 flag=0;
    21                 break;
    22             }
    23         }
    24         if (flag) ret++;
    25     }
    26     return ret;
    27 }
    28 ll dfs(int x,int sum,int st,int jb){
    29     if (x<=7){
    30         return cal(jb,sum,st);
    31     }
    32     if (!jb && dp[x][sum][st]!=-1) return dp[x][sum][st];
    33     int maxn=1;
    34     if (jb) maxn=dim[x];
    35     ll ret=0;
    36     for (int i=0; i<=maxn; i++){
    37         if (i==1) ret+=dfs(x-1,sum^i,st^1,(jb==1 && maxn==i));
    38         else ret+=dfs(x-1,sum,0,(i==maxn && jb==1));
    39     }
    40     if (!jb) return dp[x][sum][st]=ret;
    41     return ret;
    42 }
    43 int main(){
    44     int T;
    45     scanf("%d",&T);
    46     while (T--){
    47         memset(dp,-1,sizeof(dp));
    48         scanf("%lld%lld",&m,&l);
    49         for (int i=0; i<m; i++) 
    50             scanf("%lld",&a[i]);
    51         ll tmp=l;
    52         int len=0;
    53         while (tmp){
    54             dim[++len]=tmp%2;
    55             tmp/=2;
    56         }
    57         printf("%lld
    ",dfs(len,0,0,1));
    58     }
    59 }
    View Code
  • 相关阅读:
    2014第8周二杂记
    2014第8周一JS正则小问题
    2014第7周日最强大脑
    2014第7周六杂记
    2014第7周五杂记
    2014第7周四excel多列文本复制技巧
    2014第7周三初识CouchBase
    2014第7周二需求
    2014第7周1Web安全概念学习
    shell程序之逐行读取一文件里的參数且使用此參数每次运行5分钟
  • 原文地址:https://www.cnblogs.com/i-caigou-TT/p/14354084.html
Copyright © 2011-2022 走看看