zoukankan      html  css  js  c++  java
  • 牛客编程巅峰赛S1第2场

    链接:https://ac.nowcoder.com/acm/contest/6219/A
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    牛牛现在有n张扑克牌,每张扑克牌都有点数和花色两部分组成。点数为‘1’-‘9’的正整数,花色为’C’,‘D’,‘H’,‘S’'其中的一个,分别表示梅花、方块、红桃、黑桃。现在牛牛想按一定的顺序把这n张牌扔掉。扔牌顺序的规则如下1.:
    1.如果现在还剩素数张牌,则将牌顶的牌扔掉
    2.如果现在还剩非素数张牌,则将牌底的牌扔掉
    牛牛想知道他的扔牌顺序是什么,请返回扔牌顺序的字符串

    示例1
    输入
    “3C8D6H3D”
    输出
    “3D3C8D6H”
    说明
    开始n=4,为非素数,扔掉牌底的牌3D
    n=3,为素数,扔掉牌顶的牌3C
    n=2,为素数,扔掉牌顶的牌8D
    n=1,为非素数,扔掉牌底的牌6H
    示例2
    输入
    复制
    “8S8S8S8S8S8S8S”
    输出
    复制
    “8S8S8S8S8S8S8S”

    说明

    因为全是8S,所以扔牌顺序的每一张牌也都是8S

    备注:

    对于100%的数据,1≤n≤10

    题目大意:

    给出一个字符串表示有几张牌,每张牌由点数和花色组成,即两个字符为一张牌 比如样例1中:3C 8D 6H 3D一共4张牌,要出输出扔牌的顺序,剩下的牌数为素数时,则扔掉牌底的牌,反之扔掉牌顶的牌。

    解题思路:

    定义一个变量cnt表示剩余的牌,然后用双指针模拟扔牌即可。AC代码:

    class Solution {
    public:
       bool isprime(int n)
       {
    	if(n==1)
    	  return false;
    	int s=floor(sqrt(n)+0.5);
    	for(int i=2;i<=s;i++)
    	  if(n%i==0)
    	    return false;
    	return true;
        }
        string Orderofpoker(string s) {
          string ans="";
    	int p=0,q=s.length()-1;
    	int cnt=s.length()/2;
    	while(cnt)//双指针模拟一下
    	{
    		if(isprime(cnt))
    		{
    			ans=ans+s[p]+s[p+1];
    			p+=2;
    		}
    		else
    		{
    			ans=ans+s[q-1]+s[q];
    			q-=2;
    		}
    		cnt--;
    	}
            return ans;
        }
    };
    
  • 相关阅读:
    CSAcademy Or Problem
    BZOJ 4516 [Sdoi2016] 生成魔咒
    SPOJ7258 SUBLEX
    SPOJ1812 LCS2
    SPOJ1811 LCS
    SPOJ8222 NSUBSTR
    洛谷3804 【模板】后缀自动机
    SPOJ287 NETADMIN
    SPOJ1693 COCONUTS
    BZOJ5329 SDOI2018 战略游戏
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294224.html
Copyright © 2011-2022 走看看