zoukankan      html  css  js  c++  java
  • 【日常训练】Help Victoria the Wise(Codeforces 99C)

    题意与分析

    这题意思是这样的:在正方体的六面镶嵌给定颜色的宝石(相同颜色不区分),然后问最多有几种彼此不等价(即各种旋转过后看起来一致)的方案。
    其实可以乱搞,因为范围只有720。求出全排列,然后每个旋转很多次,看看彼此可不可能相同,很多次旋转后都相同说明稳了,然后最后统计即可。
    这题相当有意思的是复习了全排列的求法,竟然不能一下子想到- -|||
    下面还会说下Java里面String与StringBuilder相关的内容:(待补)

    代码

    /*
     * ACM Code => cfr99c.java
     * Written by Sam X
     * Date: 三月, 19, 2019
     * Time: 11:08
     */
    import java.util.*;
    import java.math.*;
    
    public class cf99c
    {
        static TreeSet<String> ts = new TreeSet<>();
        static HashSet<String> hs = new HashSet<>();
        static void Permutation(String obj, String str, int obj_len)
        {
            if(obj.length()==obj_len)
                ts.add(obj);
            else for(int i=0;i!=str.length();++i)
                Permutation(obj+str.charAt(i), str.substring(0, i)+str.substring(i+1, str.length()), obj_len);
        }
        public static void main(String args[])
        {
            Scanner cin = new Scanner(System.in);
            String str = cin.next();
            Permutation("", str, str.length());
            int ans=0;
            for(String s:ts) 
                if(judge(s)) 
                {
                    hs.add(s); ans++;
                }
            System.out.println(ans);
            cin.close();
        }
    
        // 乱搞,启动!
        static int maxJudge=114514;
        static boolean judge(String str)
        {
            for(int i=1;i<=maxJudge;++i)
            {
                if(Math.random()<0.5) str=rotateUp(str);
                else str=rotateLeft(str);
                if(hs.contains(str)) 
                    return false;
            }
            return true;
        }
    
        static String rotateLeft(String str)
        {
            StringBuilder sb = new StringBuilder();
            sb.append(str.charAt(0));
            sb.append(str.charAt(2));
            sb.append(str.charAt(3));
            sb.append(str.charAt(4));
            sb.append(str.charAt(1));
            sb.append(str.charAt(5));
            return sb.toString();
        }
    
        static String rotateUp(String str)
        {
            StringBuilder sb = new StringBuilder();
            sb.append(str.charAt(1));
            sb.append(str.charAt(5));
            sb.append(str.charAt(2));
            sb.append(str.charAt(0));
            sb.append(str.charAt(4));
            sb.append(str.charAt(3));
            return sb.toString();
        }
    }
    
  • 相关阅读:
    Lua Coroutine详解
    Lua IO库详解
    vue 组件基本使用
    js 发送异步请求
    小程序保存图片到相册
    js 学习四 对象应用 吃货游戏
    js 学习三 Array
    js 学习二 字符串常用方法
    js 学习一 猜数字游戏
    phpmyadmin导入大容量.sql文件
  • 原文地址:https://www.cnblogs.com/samhx/p/Codeforces-99C.html
Copyright © 2011-2022 走看看