zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 160(A-E)

    A 直接判断就行

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=300010;
    int n,x,y;
    string s;
    int main()
    {
    	cin>>s;
    	if(s.size()>=6&&s[2]==s[3]&&s[4]==s[5]) cout<<"Yes";
    	else cout<<"No";
    	return 0; 
    }
    

    B 先换500元的硬币再换5元的硬币

    clude<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=300010;
    int n,x,y;
    int main()
    {
    	cin>>n;
    	ll ans=0;
    	ans+=n/500*1000;
    	n%=500;
    	ans+=n/5*5;
    	cout<<ans;
    	return 0; 
    }
    

    C 找相邻的两个之间距离的最大值,总长减去它就可以了,1和n之间需要特判

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=300010;
    int n,x[N],y;
    int main()
    {
    	cin>>y>>n;
    	int ans=0;
    	for(int i=0;i<n;i++)
    	{
    	 	cin>>x[i];
    	 	ans=max(ans,x[i]-x[i-1]);
    	}
    	ans=max(ans,y+x[0]-x[n-1]);
    	cout<<y-ans; 
    	return 0; 
    }
    

    D 已知1到n相邻两个之间有一条边,还有x,y之间有条边,统计最短路分别长度为1到n的点对有多少,弗洛伊德求最短路一定是会超时的,仔细观察题意,只是多了一条边,那么任意i到j的最短路只会有两种情况(i<j),经过边(x,y)和不经过这条边,不经过很好求就是j-i,经过的还需要分情况:
    一下只说经过边(x,y)的情况
    如果i<x,x<j<y,最短路就是 (y-j)+(x-i)+1,(这个1就是边(x,y))
    如果x<i,j<y,最短路是 (y-j)+(x-i)+1,
    如果x<i<y,j>y,最短路就是(i-x)+(j-y)+1;
    如果i<x,j>y 最短路是 (x-i)+(j-y)+1;
    其他 情况下不经过边(x,y)就是最短了。所以将上面所有情况总结起来就是
    min(j-i,abs(y-j)+abs(x-i)+1);

    #include<iostream>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    const int N=2010;
    int n,x,y,t[2100];
    int main()
    {
    	cin>>n>>x>>y;
    	for(int i=1;i<n;i++)
    		for(int j=i+1;j<=n;j++)
    			t[min(j-i,abs(j-y)+abs(x-i)+1)]++;
    	for(int i=1;i<n;i++) cout<<t[i]<<endl;
    	return 0;
    }
    

    E 将所有球放到一起降序排列,然后从大到小遍历,拿起红球的数量不超过x,绿球不超过y,无色无所谓,知道拿起x+y个球就结束了

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=300010;
    ll x,y,a,b,c,idx; 
    struct node
    {
    	ll x,c;
    }e[N];
    bool cmp(node a,node b)
    {
    	return a.x>b.x;
    }
    int main()
    {
    	cin>>x>>y>>a>>b>>c;
    	for(int i=1;i<=a;i++) cin>>e[idx].x,e[idx++].c=1;
    	for(int i=1;i<=b;i++) cin>>e[idx].x,e[idx++].c=2;
    	for(int i=1;i<=c;i++) cin>>e[idx].x,e[idx++].c=3;
    	sort(e,e+idx,cmp);
    	int res1=0,res2=0,res3=0;
    	ll sum=0;
    	for(int i=0;i<idx;i++)
    	{
    		if(res1<x&&e[i].c==1)
    		{
    			res1++;
    			sum+=e[i].x;
    		}
    		if(res2<y&&e[i].c==2)
    		{
    			res2++;
    			sum+=e[i].x;
    		}
    		if(e[i].c==3) sum+=e[i].x,res3++;
    		if(res1+res2+res3==x+y) break;
    	}
    	cout<<sum;
    	return 0; 
    }
    
  • 相关阅读:
    第二阶段工作总结 07
    第二阶段工作总结 06
    学习进度条 第十三周
    第二阶段 工作总结 05
    小水王2
    第二冲刺阶段 工作总结 04
    第二冲刺阶段 工作总结 03
    第二冲刺阶段 工作总结 02
    第二冲刺阶段 工作总结 01
    学弟进度条 第十二周
  • 原文地址:https://www.cnblogs.com/neflibata/p/12871769.html
Copyright © 2011-2022 走看看