zoukankan      html  css  js  c++  java
  • ICPC训练周赛 Benelux Algorithm Programming Contest 2019

    D. Wildest Dreams

    这道题的意思是Ayna和Arup两人会同时在车上一段时间,在Ayna在的时候,必须单曲循环Ayna喜欢的歌,偶数段Ayna下车,若此时已经放了她喜欢的那首歌,就要将它放完,然后按照顺序播放其他的歌,输出一共播放了Ayna喜欢的歌多少分钟。

     分情况考虑,加起来总和就是一共播放的时间。

    做题思路:

    :奇数段的时间总和;

    :判断奇数段的时间Ayna喜欢的歌是否恰好播放完:

    (1)若恰好播放完,对其后的偶数段不做处理

    (2)若否,判断偶数段时间是否大于此歌未播放部分的时间:

        a.若小于等于,直接加上偶数时间段,并将该偶数段归零

        b.若大于,将偶数时间段减去此歌未播放部分的时间

    :将处理过的偶数段的时间进行计算,一共循环列表几次,判断是否恰好循环整列表

    (1)是,总和只加上循环次数乘以这首歌单曲播放完毕的时间

    (2)否,判断剩余时间长度是否包含Ayna喜欢的歌,若包含,总和加上循环次数乘以这首歌单曲播放完毕的时间+播放这首歌的时间

    AC代码:

    #include<cmath>
    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include <cstring>
    using namespace std;
    int main()
    {
        int cd,i;
        cin>>cd;
        for(int k=1;k<=cd;k++)
        {   int sum2=0;
            cout<<"CD #"<<k<<":"<<endl;
            int cds,f;
            int a[25];
            cin>>cds>>f;
            for(i=0;i<cds;i++){
                cin>>a[i];
                sum2+=a[i];
            }
            int n;
            cin>>n;
            while(n--){
                int m;
                int sum=0;
                cin>>m;
                int b[25];
                for(i=0;i<m;i++){
                    cin>>b[i];
                }
                for(i=0;i<m;i++){
                    if(i%2==0){
                        sum+=b[i];
                    }
                    if(i%2==1){
                        int sheng=b[i-1]%a[f-1];
                        if(sheng!=0){
                            b[i]-=a[f-1]-sheng;
                            if(b[i]>0){
                                 sum+=a[f-1]-sheng;
                            }else{
                                 sum+=b[i]+a[f-1]-sheng;
                                 b[i]=0;
                            }
                        }
                        sheng=b[i]/sum2;
                        sum+=sheng*a[f-1];
                        sheng=b[i]%sum2;
                        if(sheng-sum2+a[f-1]>0){
                            sum+=sheng-sum2+a[f-1];
                        }
                    }
                }
                cout<<sum<<endl;
            }
            cout<<endl;
        }
        return 0;
    }

     B. Phoneme Palindromes

    这道题的意思是根据输入的p对认为相等的字母,判断输入的字符串是否为回文。

    做题思路:

    利用<map>建立两个字母的对应,这样就将所有可以相互替换的字母都统一替换成相同字母,然后判断是否回文即可。

    AC代码:

    #include<iostream>
    #include<cstring>
    #include<map>
    using namespace std;
    int main(){
      int n,p,q,i,j,m,x,y;
      char a,b,s[100];
      cin>>n;
      for(i=1;i<=n;i++){
        cout<<"Test case #"<<i<<":" <<endl;
        cin>>p;
        map<char,char>mp;
        for(j=0;j<26;j++)
        {
          char c='a'+j;
          mp[c]=c;
        }
        for(j=0;j<p;j++){
          cin>>a>>b;
          mp[a]=mp[b]=a;
        }
        cin>>q;
        for(j=0;j<q;j++){
          cin>>s;
          cout<<s<<" ";
          m=strlen(s);
          int p=0;
          for(x=0;x<m;x++){
            s[x]=mp[s[x]];
          }
          for(x=0;x<=m/2;x++){
            if(s[x]!=s[m-x-1]){
              p=1;
              break;
            }
          }
          if(p==0){
            cout<<"YES"<<endl;
          }
          else{
            cout<<"NO"<<endl;
          }
        }
      cout<<endl;
      }
      return 0;
    }

  • 相关阅读:
    3. Image Structure and Generation
    STM32F103
    10.2 External interrupt/event controller (EXTI)
    10.1 Nested vectored interrupt controller (NVIC) 嵌套矢量中断控制器
    ibatis 使用 in 查询的几种XML写法
    文字纵向打印
    oracle每天清理归档日志
    使用语句查询mssql死锁
    Xml序列化UTF-8格式错误
    Nginx的优点
  • 原文地址:https://www.cnblogs.com/nanan/p/12595062.html
Copyright © 2011-2022 走看看