• 2020-2021 ACM-ICPC, Asia Seoul Regional Contest_组队训练


    2020-2021 ACM-ICPC, Asia Seoul Regional Contest

    B. Commemorative Dice

    C. Dessert Café

    E. Imprecise Computer

    B. Commemorative Dice

     B题签到题,暴力找一遍就好了

    #include<bits/stdc++.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #define ll long long int
    #define mem(a,b) memset(a,b,sizeof a)
    using namespace std;
    int a[11],b[11];
    int main()
    {
    	for(int i=1;i<=6;i++)
    	{
    		cin>>a[i];
    	}
    	for(int i=1;i<=6;i++)
    	{
    		cin>>b[i];
    	}
    	int ans = 0;
    	for(int i=1;i<=6;i++)
    	{
    		for(int j=1;j<=6;j++)
    		{
    			if(a[i]>b[j]) ans++;
    		}
    	}
    	cout<<ans/(__gcd(ans,36))<<"/"<<36/(__gcd(ans,36));
     } 
    

     C. Dessert Café

    题意:给你一棵树,里面有n个点,和n-1条边和边权,还有m个特殊点,如果存在一个候选地点z,其中公寓建筑群的位置使得每个候选地点q(≠p)的d(p,z)<d(q,z),则候选地点p是一个好地方。问这样的点有多少个?

    题解:遍历一遍树,找出每两个特殊点之间有多少个点(包括他们自己),但不能重复,所以dfs一遍就好了。

    #include<bits/stdc++.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #define ll long long int
    #define mem(a,b) memset(a,b,sizeof a)
    using namespace std;
    int a[1001000];
    vector<int>g[1000100];
    bool vis[1000100];
    bool visit[1000100];
    int count1 = 0;
    int dfs(int u)
    {
        if(vis[u]) return 0;
        bool flag=0;
        vis[u]=1;
        for(int i=0;i<g[u].size();i++){
            if(vis[g[u][i]]) 
    		{
    			continue;
    		}
            if(dfs(g[u][i])&&!flag)
    		{
                if(!visit[u]) 
    			{
    				count1++;
    			}
                flag=1;
            }
        }
        if(visit[u]||flag) return 1; 
    }
    int main()
    {
    	int n,m;
    	cin>>n>>m;
    	for(int i=1;i<=n-1;i++)
    	{
    		int u,v,w;
    		cin>>u>>v>>w;
    		g[u].push_back(v);
    		g[v].push_back(u);
    	}
    	for(int i=1;i<=m;i++)
    	{
    		cin>>a[i];
    		visit[a[i]] = 1;
    	}
    	count1 = m;
    	dfs(a[1]);
    	cout<<count1<<endl;
    	
     } 
    

     E. Imprecise Computer

    题意:就是1-n之间数比大小,只有两个数之间相差大于等于2的时候才可以比较出大小,那么比如1可以大于2,2也可以大于1,都是成立的,现在叫你构造出两个数组,就是1-n之间的全比较,构造出大于i(i=1.2.3....n)的数构成的数组r1,r2,使满组给出的数组d[i]=abs(r1[i]-r2[i]);

    题解:给一个波尔类型flag在遇到1时异或一下,但是在遇到的d[i]==2时flag状态必须为1,因为当为2时i和i-1,和i+1都是交换过的,所以必须为1,同时要满足flag最后要为0,并且d[i]必须小于等于2

    #include<bits/stdc++.h>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #define ll long long int
    #define mem(a,b) memset(a,b,sizeof a)
    using namespace std;
    int d[1000100];
    int main()
    {
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>d[i];
    	}
    	bool flag = true;
    	int flag1 = 0;
    	for(int i=1;i<=n;i++)
    	{
    		if(d[i]>2) 
    		{
    			flag = false;
    			break;
    		}
    		else{
    			if(d[i]==1)
    			{
    				flag1 = 1 - flag1;
    			}
    			else if(d[i]==2)
    			{
    				if(flag1 == 0)
    				{
    					flag = false;
    					break;
    				}
    			}
    		}
    	}
    	if(flag&&!flag1)
    	{
    		puts("YES");
    	}
    	else{
    		puts("NO");
    	}
     } 
    

      

     

  • 相关阅读:
    Windows phone 墓碑机制的一些源码
    关于Image一些比较抽象的东西(Build Type与 同步以及异步加载的差异)
    自定义控件之Button控件的自定义
    Java集合最全解析,学集合,看这篇就够用了!!!
    看完让你彻底搞懂Websocket原理
    别人的前途我不敢决定
    花一年的时间让自己过得像个人样
    开篇
    你看得懂吗?
    反思
  • 原文地址:https://www.cnblogs.com/lcsdsg/p/14340742.html
Copyright © 2020-2023  润新知