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; 
    }
    
  • 相关阅读:
    [ jquery 选择器 :hidden ] 此方法选取匹配所有不可见元素,或者type为hidden的元素
    剑指 Offer 03. 数组中重复的数字 哈希
    LeetCode 1736. 替换隐藏数字得到的最晚时间 贪心
    Leetcode 1552. 两球之间的磁力 二分
    Leetcode 88. 合并两个有序数组 双指针
    LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
    LeetCode 1743. 相邻元素对还原数组 哈希
    LeetCode 1745. 回文串分割 IV dp
    剑指 Offer 47. 礼物的最大价值 dp
    剑指 Offer 33. 二叉搜索树的后序遍历序列 树的遍历
  • 原文地址:https://www.cnblogs.com/neflibata/p/12871769.html
Copyright © 2011-2022 走看看