• codeforces #693 (Div. 3)


    A

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef pair<int,int>PII;
    const int N=5100;
    
    int main()
    {
    	int t;cin>>t;
    	while(t--)
    	{
    		int w,h,n;cin>>w>>h>>n;
    		int cnt=1;
    		while(w%2==0)
    		{
    			w/=2;
    			cnt*=2;
    		}
    		while(h%2==0)
    		{
    			h/=2;
    			cnt*=2;
    		}		
    		if(cnt>=n)
    			cout<<"YES"<<endl;
    		else	
    			cout<<"NO"<<endl;
    	}
        return 0;
    }
    

    B

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef pair<int,int>PII;
    const int N=5100;
    
    int n,a[N];
    int main()
    {
    	int t;cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		int cnt1=0,cnt2=0;
    		for(int i=0;i<n;i++)
    		{
    			cin>>a[i];
    			if(a[i]&1)
    				cnt1++;
    			else
    				cnt2++; 
    		}
    		if((cnt1!=0&&cnt1%2==0)||(cnt1==0&&cnt2%2==0))
    			cout<<"YES"<<endl;
    		else
    			cout<<"NO"<<endl;
    		
    		
    	}
        return 0;
    }
    

    C

    模拟是O(N*N) 会T
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef pair<int,int>PII;
    const int N=2e5+10;
    typedef long long ll;
    int n,a[N];
    ll f[N];
    int main()
    {
    	int t;cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		for(int i=1;i<=n;i++)
    			cin>>a[i],f[i]=0;
    		ll ans=-1;
    		for(int i=1;i<=n;i++)
    		{
    			int j=i;
    			while(j<=n)
    			{
    				f[i]+=a[j];
    				j+=a[j];
    			}
    		}
    		for(int i=1;i<=n;i++)
    			ans=max(ans,f[i]);
    		cout<<ans<<endl;
    	}
        return 0;
    }
    优化之后
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef pair<int,int>PII;
    const int N=2e5+10;
    typedef long long ll;
    int n,a[N];
    bool st[N];
    int main()
    {
    	int t;cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		for(int i=1;i<=n;i++)
    			cin>>a[i],st[i]=0;
    		ll ans=-1;
    		//注意到第一次跳到某个点一定比第二次跳到同
    		//一个点得分高 
    		for(int i=1;i<=n;i++)
    		{
    			ll j=i,sum=0;
    			while(j<=n)
    			{
    				if(st[j])break;
    				st[j]=1;
    				sum+=a[j];
    				j+=a[j];
    			}
    			ans=max(sum,ans);
    		}
    		cout<<ans<<endl;
    	}
        return 0;
    }
    

    D

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef pair<int,int>PII;
    const int N=2e5+10;
    typedef long long ll;
    int n,a[N];
    
    int main()
    {
    	int t;cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		for(int i=0;i<n;i++)
    			cin>>a[i];
    		sort(a,a+n,greater<int>());
    		ll suma=0,sumb=0;//注意爆ll 
    		for(int i=0;i<n;i++)
    		{
    			if(i&1)
    			{
    				if(a[i]&1)
    					sumb+=a[i];
    			}
    			else
    			{
    				if(a[i]%2==0)
    					suma+=a[i];
    			}
    		}
    		if(suma>sumb)
    			cout<<"Alice"<<endl;
    		else if(suma==sumb)
    			cout<<"Tie"<<endl;
    		else
    			cout<<"Bob"<<endl;
    		
    	}
        return 0;
    }
    

    E

    https://blog.csdn.net/weixin_43911947/article/details/112217993?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    /*
    */
    const int maxn = 2e5 + 10;
    
    struct node{
    	int x, y, id;
    	bool operator < (const node &a) const{
    		if(x == a.x) 
    			return y < a.y;	
    		return x < a.x;
    	}
    }a[maxn];
    int ans[maxn];
    int main(){
    	int t, n;
    	cin >> t;
    	while(t --){
    		cin >> n;
    		for(int i = 1; i <= n; i ++){
    			cin >> a[i].x >> a[i].y;
    			if(a[i].x > a[i].y) swap(a[i].x, a[i].y);
    			a[i].id = i; ans[i] = -1;
    		}
    		sort(a + 1, a + n + 1);
    		//wi<wj&&hi<hj
    		
    		for(int i=1;i<=n;i++)
    			cout<<a[i].x<<" "<<a[i].y<<" "<<"id="<<a[i].id<<endl;
    		 
    		int tmp = 0x3f3f3f3f, id = -1, j = 1;
    		
    		for(int i = 1; i <= n; i ++){
    			while(j < i && a[j].x < a[i].x){//排除等于情况 
    				if(tmp > a[j].y){//找最小的y 
    					tmp = a[j].y;
    					id = a[j].id;
    				}
    				j ++;
    			}
    			if(tmp < a[i].y) //如果找到了 满足wi<wj&&hi<hj的id,更新id 
    				ans[a[i].id] = id;
    		}
    		
    		cout<<"---"<<endl;
    				for(int i=1;i<=n;i++)
    			cout<<a[i].x<<" "<<a[i].y<<" "<<"id="<<a[i].id<<endl;
    		for(int i = 1; i <= n; i ++){
    			cout << ans[i]<<" ";
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
    

    G

    https://blog.csdn.net/qq_44951010/article/details/112311346
    #include<iostream>
    #include<queue>
    #include<vector>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    const int  MAXN=200005;
    
    
    int d[MAXN], f[MAXN];
    bool vis[MAXN];
    vector<int> edges[MAXN],c[MAXN];
    
    int main()
    {
        int T; scanf("%d", &T);
        while(T--) {
            int n, m; scanf("%d%d", &n, &m);
            for(int i=0;i<=n;++i) edges[i].clear(), c[i].clear();
            //邻接矩阵存图 
            for(int i=0;i<m;++i) {
                int u, v; scanf("%d%d", &u, &v);
                edges[u].push_back(v);
            }
            // 求d,有向图,邻接矩阵求bfs 
            for(int i=0;i<=n;i++) vis[i]=0;
            
            queue<int> Q;
            d[1] = 0; vis[1] = true;
            Q.push(1);
            while(Q.size()){
                int u = Q.front(); Q.pop();
                
                c[d[u]].push_back(u);//与d[u]距离相同的点放一起
    //            cout<<u<<"---------";
                for(int i=0;i<edges[u].size();i++) {
                    int v = edges[u][i];//v是u的一个临点 
                    if(vis[v]) continue;
                    d[v] = d[u] + 1;
                    vis[v] = true;
                    Q.push(v);
                }
            }
            
    //        for(int i=0;i<3;i++)
    //        {
    //        	for(int j=0;j<c[i].size();j++)
    //        		cout<<c[i][j]<<" ";
    //        	cout<<endl;
    //		}
            	
    				
            cout<<endl;
    //        for(int i=1;i<=n;i++)
    //        	cout<<d[i]<<" ";
    //		cout<<endl; 
            
            // 求结果f
            // d 0 1 1 2 2 2
            // f 0 0 1 2 0 1
            //f一定会被d所更新 
            for(int i=1;i<=n;++i) f[i] = d[i];  // f初值等于d
            
            for(int l=n-1;l>0;l--) {// 由远到近遍历每一点 
                int num = c[l].size();
                for(int i=0;i<num;++i) {
                    int u = c[l][i];//点的编号 
                    
                    int len = edges[u].size();
                    
                    for(int j=0;j<edges[u].size();++j) {
                        int v = edges[u][j];
                        //遍历这些点 
                        //if(d[u] < d[v]) f[u] = min(f[u], f[v]);
                        f[u] = min(f[u], f[v]);
    //                    else f[u] = min(f[u], d[v]);
                    }
                }
            }
            
            for(int i=1;i<=n;++i) printf("%d ", f[i]);
            printf("
    ");
        }
        return 0;
    }
    
    
  • 相关阅读:
    TCP原理简介
    zabbix_get [109064]: Check access restrictions in Zabbix agent configuration
    Log4j2:异步日志中打印方法名和行号信息
    高仿腾讯QQ最终版
    启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
    修改hosts立刻生效不必重启
    MyEclipse的Debug模式启动缓慢
    SpringBatch配置数据库
    SpringBatch的核心组件JobLauncher和JobRepository
    SpringBatch前言
  • 原文地址:https://www.cnblogs.com/forward-985/p/14272587.html
Copyright © 2020-2023  润新知