• AcWing第 70 场周赛题解


    4618. 两个素数

    暴力枚举判断即可

    bool is_primes(int x)
    {
    	for(int i=2;i<=x/i;i++)
    		if(x%i==0)return false;
    	return true;
    }
    void solve()
    {
    	cin>>n;
    	rep(i,1,n)
    	{
    		rep(j,i,n)
    		{
    			if(is_primes(i)&&is_primes(j)&&i*j==n)
    			{
    				cout<<i<<' '<<j<<endl;
    				return;
    			}
    		}
    	}
    }
    

    4619. 减法操作

    第一种操作把相邻两个数-1,第二种操作时对任意一个数-2
    要使所有数字都变成0。
    我们先将数组中的所有奇数都先想办法编程偶数,如果都变成偶数则再使用操作二就能满足条件,否则不满足。所以题目的关键在于如何尽可能使用第一种操作使数组元素都变成偶数。

    #include 
    using namespace std;
    const double pi = acos(-1);
    const double eps=1e-7;
    #define YES cout<<"YES"<<endl
    #define NO cout<<"NO"<<endl
    #define x first
    #define y second
    #define int long long
    #define lb long double
    #define pb push_back
    #define endl '\n'//交互题删掉此 
    #define all(v) (v).begin(),(v).end()
    #define PII pair<int,int>
    #define rep(i,x,n) for(int i=x;i<=n;i++)
    #define dwn(i,n,x) for(int i=n;i>=x;i--)
    #define ll_INF 0x7f7f7f7f7f7f7f7f
    #define INF 0x3f3f3f3f
    #define debug(x) cerr << #x << ": " << x << endl
    #define io ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
    int Mod(int a,int mod){return (a%mod+mod)%mod;}
    int lowbit(int x){return x&-x;}//最低位1及其后面的0构成的数值
    int qmi(int a, int k, int p){int res = 1 % p;while (k){if (k & 1) res = Mod(res * a , p);a = Mod(a * a , p);k >>= 1;}return res;}
    int inv(int a,int mod){return qmi(a,mod-2,mod);}
    int n;
    const int N=2e5+10;
    int a[N];
    void solve()
    {
    	cin>>n;
    	rep(i,1,n)cin>>a[i];
    	rep(i,1,n-1)
    	{
    		if(a[i]%2)
    			if(a[i+1]>0)a[i+1]--,a[i]--;
    	}
    	rep(i,1,n)
    		if(a[i]%2)
    		{
    			NO;
    			return;
    		}
    	YES;
    }
    signed main()
    {
    	io;
    	int _;_=1;
    	//cin>>_;
    	while(_--)solve();
        return 0;
    }
    

    4620. 旅行

    前置知识:
    树形dp,树的最长路径,维护最长和次长权值。
    1.题目分析:
    题目有个限制条件其实是用来迷惑我们的。
    即:在经过任何一条边之前,你的现有能量都不能少于该边所需消耗的能量(否则,将无法顺利通过该边)。
    举个简单的例子:
    一条简单路径(A,B,C,D为节点):A->B->C->D;
    经过A->B->(还没有到C)之后能量值已经小于0,那么我们可以将原来的路径优化成C->D;
    这其实也就说明了,我们利用树形DP得到的最大值的路径中就不会出现能量值小于0的情况,也就是说如果有能量值小于0
    的情况,他绝对不可能是能量值最大的解。
    2.枚举:
    接下来我们枚举每一种方案,然后得出能量最大值即可,那么我们如何枚举每一种方案呢,我们可以根据方案中树的最高点是哪个点来分析,这样的枚举是不重不漏的。
    3.根据树形DP,类似于树的最长路径来做就可以了。

    #include 
    using namespace std;
    const double pi = acos(-1);
    const double eps=1e-7;
    #define YES cout<<"YES"<<endl
    #define NO cout<<"NO"<<endl
    #define x first
    #define y second
    #define int long long
    #define lb long double
    #define pb push_back
    #define endl '\n'//交互题删掉此 
    #define all(v) (v).begin(),(v).end()
    #define PII pair<int,int>
    #define rep(i,x,n) for(int i=x;i<=n;i++)
    #define dwn(i,n,x) for(int i=n;i>=x;i--)
    #define ll_INF 0x7f7f7f7f7f7f7f7f
    #define INF 0x3f3f3f3f
    #define debug(x) cerr << #x << ": " << x << endl
    #define io ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
    int Mod(int a,int mod){return (a%mod+mod)%mod;}
    int lowbit(int x){return x&-x;}//最低位1及其后面的0构成的数值
    int qmi(int a, int k, int p){int res = 1 % p;while (k){if (k & 1) res = Mod(res * a , p);a = Mod(a * a , p);k >>= 1;}return res;}
    int inv(int a,int mod){return qmi(a,mod-2,mod);}
    int n;
    const int N=3e5+10,M=N*2;
    int h[N],e[M],ne[M],w[M],w_c[N],idx;
    int res;
    void add(int a,int b,int c)
    {
    	e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++;
    }
    int dfs(int u,int fa)
    {
    	int s=0,d1=0,d2=0;
    	for(int i=h[u];~i;i=ne[i])
    	{
    		int j=e[i];
    		if(j==fa)continue;
    		int w_s=dfs(j,u)-w[i];
    		s=max(s,w_s);
    		if(w_s>d1)d2=d1,d1=w_s;
    		else if(w_s>d2)d2=w_s;
    	}
    	res=max(res,d1+d2+w_c[u]);
    	return max(w_c[u],s+w_c[u]);
    }
    void solve()
    {
    	memset(h,-1,sizeof h);
    	cin>>n;
    	rep(i,1,n)cin>>w_c[i];
    	rep(i,1,n-1)
    	{
    		int a,b,c;
    		cin>>a>>b>>c;
    		add(a,b,c),add(b,a,c);
    	}
    	dfs(1,-1);
    	cout<<res<<endl;
    }
    signed main()
    {
    	io;
    	int _;_=1;
    	//cin>>_;
    	while(_--)solve();
        return 0;
    }
    
  • 相关阅读:
    LeetCode50天刷题计划(Day 21—— 外观数列、组合总和(11.50-12.30;12.30-14.20)
    五子棋小游戏——Java
    Linux 中的权限
    ssm+校园疫情申报系统 毕业设计-附源码221228
    【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.8 绘图事件
    照片全屏水印轻松去除,让你的照片焕然一新
    记录一次腾讯测试开发工程师自动化接口测试实践经验
    【开发应该了解的Web文件下载】
    基于Java的度分秒坐标转纯经纬度坐标的漂亮国基地信息管理
    为什么Python在数据分析行业备受欢迎?优势在哪?
  • 原文地址:https://blog.csdn.net/qq_52765554/article/details/127039606