• Codeforces Round #660 (Div. 2)


    A. Captain Flint and Crew Recruitment

    题意

    给定一个n是四个数的和,四个数中至少有三个准质数(分解为两个质数的积),四个数互不相同,分解的两个质数也不同。

    思路

    A题一定不是难题,枚举一下可以知道,要最小可能三个的准质数(前三个或者前二到四个),检查是否可行即可。

    代码

    
    int a[7]={0,6,10,14,15,21,22};
    int n;
    bool check(int x,int y,int z)
    {
    	if(x+y+z>=n)return 0;
    	int pp=n-x-y-z;
    	if(pp==x||pp==y||pp==z)return 0;
    	return 1;
    }
    int main()
    {
        int T;
        scanf("%d", &T);
    	while(T--)
    	{
    		n=read();
    		int flag=0;
    		for(int i=1;i<=4;i++)
    		{
    		
    		for(int j=i+1;j<=5;j++)
    		{
    		
    		for(int k=j+1;k<=6;k++)
    		{
    			if(check(a[i],a[j],a[k]))
    			{
    				printf("YES
    ");
    				printf("%d %d %d %d
    ",a[i],a[j],a[k],n-(a[i]+a[j]+a[k]));
    				flag=1;
    				break;
    			}
    		}
    			if(flag)break;
    		}
    			if(flag)break;
    		}
    		if(!flag)
    		printf("NO
    ");
    	}
        return 0;
    }
    

    C. Uncle Bogdan and Country Happiness

    题意:

    有n个城市m个人,每个城市有若干的人的家,每个人有好的或者坏的心情,他们都要从1(首都)以最短路径回家。每个城市有个快乐值为经过的好心情的人数减去坏心情的人数,每个人可以在路上从好心情变坏但是不能从坏心情变好,检查每个城市的快乐值可能正确吗?

    思路

    树形dp问题,但是要注意好心情和坏心情的人数分配后要大于等于0,我就是这样wa了

    代码

    
    vector<int >g[100005];
    int h[100005],p[100005];
    int dp[100005][2];//[0]好心情//[1]坏心情或者可分配的心情
    int flag;
    void dfs(int u,int fa)
    {
    	if(!flag)return;
    	for(int i=0;i<g[u].size();i++)
    	{
    		int v=g[u][i];
    		if(v==fa)continue;
    		dfs(v,u);
    		dp[u][0]+=dp[v][0];
    		dp[u][1]+=dp[v][1];
    	}
    	int cha=h[u]-(dp[u][0]-dp[u][1]);
    	if(cha<0)
    	{
    		flag=0;
    		return;
    	}
    	if(cha%2==1)
    	{
    		flag=0;
    		return;
    	}
    	int jian=cha/2;
    	dp[u][0]+=jian;
    	dp[u][1]-=jian;
    	if(dp[u][0]<0)flag=0;
    	if(dp[u][1]<0)flag=0;
    }
    main(void)
    {
    	int t=read();
    	while(t--)
    	{
    		flag=1;
    		int n=read();
    		for(int i=1;i<=n;i++)
    		{
    			g[i].clear();
    			dp[i][0]=0;
    			dp[i][1]=0;	
    		} 
    		int m=read();
    		for(int i=1;i<=n;i++)
    		{
    			p[i]=read();
    			dp[i][1]=p[i];
    		}
    		for(int i=1;i<=n;i++)
    		{
    			h[i]=read();
    		}
    		for(int i=1;i<=n-1;i++)
    		{
    			int x=read();
    			int y=read();
    			g[x].push_back(y);
    			g[y].push_back(x);
    		}
    		dfs(1,1);
    		if(flag)printf("YES
    ");
    		else printf("NO
    "); 
    	}
    }
    
    
  • 相关阅读:
    写一个精确定位异常的方法
    做一个牛XX的身份证号验证类(支持15位和18位)
    C#获取设备的IP和Mac类
    winfrom 倒计时控件
    一个实用价值很大的人脸关键点检测算法PFLD
    刷新WIDER Face纪录!TinaFace:人脸检测新网络,代码已开源!
    虚拟机安装教程
    python---文件路径的操作(有点意思)
    python_opencv -------->>>>>>>>>cv2.warpAffine()参数详解
    yolov5数据增强引发的思考——透视变换矩阵的创建
  • 原文地址:https://www.cnblogs.com/wangqianyv/p/13409072.html
Copyright © 2020-2023  润新知