UCF Local Programming Contest 2016 (2020-3-28)

A. Majestic 10

解题思路:每次输入三个整数,三个数都小于零输出“zilch”,一个大于零输出“double”,两个大于零输出“double-double”,三个都大于零输出“triple-double”

#include<iostream>
#include<cmath>
using namespace std;
int a[1000],b[1000],c[1000],counts[10000];
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i]>>c[i];
        if(a[i]>=10)
            counts[i]++;
        if(b[i]>=10)
          counts[i]++;
        if(c[i]>=10)
          counts[i]++;
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<" "<<b[i]<<" "<<c[i]<<endl;
        if(counts[i]==0){
            cout<<"zilch"<<endl;
        }else if(counts[i]==1){
            cout<<"double"<<endl;
        }else if(counts[i]==2){
            cout<<"double-double"<<endl;
        }else{
            cout<<"triple-double"<<endl;
        }
        if(i<n){
            cout<<endl;
        }

    }
        return 0;
}

B. Phoneme Palindromes

解题思路:给定发音相同的字母和一个字符串,将发音相同的两个字母的任意一个换成另外一个,再判断是否为回文,对于每个测试用例,输出标题“Test case #n:”,其中n表示用例号从1开始。然后打印该测试用例的每个字符串,后面跟一个空格,后面跟一条消息(YES或NO),指示该字符串是否是音素回文。在每个测试用例的输出之后留下空行。
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include <string.h>
using namespace std;
int main()
{
    int n,t,i,n2;
    char arr[13][2];
    cin>>t;
    for(int k=1;k<=t;k++)
    {
        cout<<"Test case #"<<k<<':'<<endl;
        cin>>n;
        for(i=0; i<n; i++)
        {
            cin>>arr[i][0]>>arr[i][1];
        }
        cin>>n2;
        while(n2--){
            string a,b;
            cin>>a;
            b=a;
            int len =a.length();
            for(i=0;i<len;i++){
                for(int j=0;j<n;j++){
                    if(a.at(i)==arr[j][1]){
                        a.at(i)=arr[j][0];
                    }
                }
            }
            for(i=0;i<len;i++){
                if(a.at(i)!=a.at(len-i-1)){
                    break;
                }
            }
            if(i==len){
                cout<<b<<' '<<"YES"<<endl;
            }else{
                cout<<b<<' '<<"NO"<<endl;
            }
        }
        cout<<endl;
    }
    return 0;
}


C. Don't Break the Ice

解题思路:给定一个正方形棋盘的尺寸(行数和列数)和一个移动列表,确定尝试移动的次数,这些移动将击倒一个不在棋盘上的冰块。当一块冰砖被敲碎时,其他的冰砖可能也会从木板上掉下来。更具体地说,一个冰块会掉下来,除非它在一个完整的行(行包含它所有的冰块)或它在一个完整的列(列包含它所有的冰块)。判断每一步移动的冰块,所在的行和列是否完整
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include <string.h>
using namespace std;
int main()
{
    int n,s,i,count,t,a,b;
    cin>>t;
    for(int k=1;k<=t;k++)
    {
        int c[51][51]={0};
        count=0;
        cin>>n>>s;
        while(s--){
            cin>>a>>b;
            int flag1=0,flag2=0;
            for(i=0;i<n;i++){
                if(c[a-1][i]==1){
                    flag1=1;
                }
                if(c[i][b-1]==1){
                    flag2=1;
                }
            }
            if(flag1==1&&flag2==1){
                count++;
            }
            c[a-1][b-1]=1;

        }
        cout<<"Strategy #"<<k<<": ";
        cout<<count<<endl;
        if(k!=t)
        cout<<endl;
    }
    return 0;
}

D. Wildest Dreams

当Anya上车时,她的歌从头开始播放,只要Anya在车里,这首歌就会一直重复播放。你可以假设,如果Anya在她的歌播放到一半时从车里出来,Arup会继续听她的歌,而不是把CD转发到下一首歌,但当Anya的歌播放完后,下一首歌会继续播放。如果Anya的歌正好在她下车的时候结束,那么下一首歌就会继续。Anya的歌并没有回到开头。
每张CD的第一行输入将包含两个整数:t(1≤t≤20),CD上的曲目数量,k(1≤k≤t), Anya痴迷的曲目。每张CD的第二行输入包含正整数分隔的t空格,表示CD上每个t音轨的长度,下面的d行包含每天的信息。每一行都以一个整数si始。(1≤s≤20),表示第i天的行驶段数,后面是s正整数,表示每个行驶段的长度,单位为秒。假设Anya在车中进行奇数段(第一、第三、第五等)。


计算Arup听Anya喜欢的歌的时间,奇数段时间直接求和,并确定奇数段结束的时候播放的位置。正好播完则直接进入循环,没播完sum+剩余的时间,开始循环播放,循环的时间-剩余时间,算一共循环了几周,乘以歌的时间,加上,如果结束时正在播放Anya喜欢是歌曲,加上已播放的时间
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include <string.h>
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;
}

H. Count the Dividing Pairs

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn1 1000010
#define maxn2 10000010
typedef long long ll;
int a[maxn1],b[maxn2];
ll f(int a,int b);
int main(){
    
    int n,i,j;
    int p,maxx=0;
    long long counts=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&p);
        maxx=0,counts=0;
        memset(b,0,sizeof(b));
        for(j=0;j<p;j++){
            scanf("%d",&a[j]);//所以换成cin就超时了?
            b[a[j]]++;
            maxx=max(maxx,a[j]);
        }
        counts=f(b[0],p-b[0]);
        counts+=f(b[1],p-b[0]-b[1]);
        
        for(j=2;j<=maxx/2;j++){    
            if(b[j]){
                for(int k=2*j;k<=maxx;k+=j){
                    if(b[k])
                    counts+=f(b[j],b[k]);
                }
            }
        }
        printf("Test case #%d: ",i);
        printf("%lld ",counts);
    }
    return 0;
}
ll f(int a,int b){
    long long end=a;
         end*=b;
    return end;
}

原文地址:https://www.cnblogs.com/a-specter/p/12619143.html