• 程序设计思维与实践CSP-M4补题


    程序设计思维与实践CSP-M4补题

    A - TT数鸭子

    问题分析

    遍历数字,输出不重复的数字的个数。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <set>
    using namespace std;
    char num[20];
    bool flag[15]; 
    int n,k;
    int main() {
    	scanf("%d%d",&n,&k);
    	int ans=0;
    	for(int i=0;i<n;i++)
    	{
    		scanf("%s",num);
    		//set<char> ss;
    		int tmp=0;
    		memset(flag,false,sizeof(flag));
    		for(int j=0;j<strlen(num);j++)
    		{
    			if(!flag[num[j]-'0'])
    			{
    				flag[num[j]-'0']=true;tmp++;
    			}
    		}
    		if(tmp<k)ans++;
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
    

    B - ZJM要抵御宇宙射线

    问题分析

    对每个点,找它到其他点的最长距离,然后再从所有的最长距离中求取最小值。

    #include <iostream>
    #include <stdio.h>
    #include <cmath>
    using namespace std;
    const int size=1005;
    double x[size];
    double y[size];
    double length[size];
    int main() {
       int n;
       scanf("%d",&n);
       for(int i=0;i<n;i++)
       	scanf("%lf%lf",&x[i],&y[i]);
       for(int i=0;i<n;i++)
       {
       	length[i]=0;
       	for(int j=0;j<n;j++)
       	{
       		double dx=x[i]-x[j];
       		double dy=y[i]-y[j];
       		double tmp=dx*dx+dy*dy;
       		if(tmp>length[i])
       			length[i]=tmp;
       	}
       }
       int ans=0;
       double ll=length[0];
       for(int i=1;i<n;i++)
       {
       	if(ll>length[i])
       	{
       		ans=i;
       		ll=length[i];
       	}
       	else if(ll==length[i])
       	{
       		if(x[i]<x[ans])
       		{
       			ans=i;
       		}
       		else if(x[i]==x[ans]&&y[i]<y[ans])
       		{
       			ans=i;
       		}	
       	}
       }
       printf("%.2lf %.2lf
    ",x[ans],y[ans]);
       printf("%.2lf",ll);
       return 0;
    }
    
    
    

    C - 宇宙狗的危机

    问题分析

    对数据进行排序,然后若数据中存在某一个数,以它为根节点,它前面区间中的节点为它的左子树,它右面区间中的节点为它的右子树则满足题意,否则不满足。

    #include <iostream>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    const int size=710;
    int n;
    int num[size];
    bool flag[size][size];
    bool R[size][size],L[size][size]; 
    int gcd(int a,int b)
    {
       return b==0?a:gcd(b,a%b);
    } 
    bool solve()
    {
       for(int l=n;l>=1;l--)
       {
       	for(int r=l;r<=n;r++)
       	{
       		for(int k=l;k<=r;k++)
       		{
       			if(L[k][l]&&R[k][r])
       			{
       				if(flag[l-1][k])
       					R[l-1][r]=true;
       				if(flag[r+1][k])
       					L[r+1][l]=true;
       			}
       		}
       	}
       }
       bool ans=false;
       for(int i=1;i<=n;i++)
       {
       	if(L[i][1]&&R[i][n])
       	{
       		ans=true;
       		break;
       	}
       }
       return ans;
    }
    int main() {
       int T;
       scanf("%d",&T);
       memset(flag,false,sizeof(flag));
       while(T--)
       {
       	scanf("%d",&n);
       	memset(R,false,sizeof(R));
       	memset(L,false,sizeof(L));
       	for(int i=1;i<=n;i++)
       	{
       		scanf("%d",&num[i]);
       		L[i][i]=R[i][i]=true;		
       	}
       	for(int i=1;i<=n;i++)
       	{
       		for(int j=i;j<=n;j++)
       		{
       			if(gcd(num[i],num[j])>1)
       				flag[i][j]=flag[j][i]=true;
       			else
       				flag[i][j]=flag[j][i]=false;
       		}
       	}
       	bool ans=solve();
       	if(ans)
       		printf("Yes
    ");
       	else
       		printf("No
    ");
       }
       return 0;
    }
    
    
  • 相关阅读:
    C语言32个关键字详解
    C语言格式控制符
    c++关键字详解
    多码流简介
    Jtag管脚定义
    关于RGB信号的电平
    缩略语MSPS
    【转】松下18650的容量判别方法
    电信号在FR4材料中的传播速度
    dropout voltage
  • 原文地址:https://www.cnblogs.com/master-cn/p/13052572.html
Copyright © 2020-2023  润新知