spoj 416

2024-06-10 17:38
文章标签 416 spoj

本文主要是介绍spoj 416,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

又臭又长的烂代码 ......

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define maxn 1010using namespace std;char a[1010];
int num[10],last;//bool cc(int sum)
//{
//    if(sum%3 == 0)
//        return true;
//    else if(sum % 3 == 1)
//    {
//        int v;
//        for(v = 0; v < 3; v++)
//            if(num[v*3+1])
//                break;
//        if(v == 3)
//        {
//            int tt = 2;
//            for(int k = 0; tt && k < 3; k++)
//                while(tt && (num[k*3+2]))
//                {
//                    num[k*3+2]--;
//                    tt--;
//                }
//            if(tt)
//                return false;
//        }
//        else
//            num[v*3+1]--;
//    }
//    else
//    {
//        int v;
//        for(v = 0; v < 3; v++)
//            if(num[v*3+2])
//                break;
//        if(v == 3)
//        {
//            int tt = 2;
//            for(int k = 0; tt && k < 3; k++)
//                while(tt && (num[k*3+1]))
//                {
//                    num[k*3+1]--;
//                    tt--;
//                }
//            if(tt)
//                return false;
//        }
//        else
//            num[v*3+2]--;
//    }
//    return true;
//}
bool cc(int sum)
{if(sum%3 == 0)return true;else if(sum % 3 == 1){if(num[1]){num[1]--;return true;}else if(num[4]){num[4]--;return true;}else if(num[7]){num[7]--;return true;}else if(num[2] >= 2){num[2] -= 2;return true;}else if(num[2] && num[5]){num[2]--;num[5]--;return true;}else if(num[2] && num[8]){num[2]--;num[8]--;return true;}else if(num[5] >= 2){num[5] -= 2;return true;}else if(num[8] && num[5]){num[5]--;num[8]--;return true;}else if(num[8] >= 2){num[8] -= 2;return true;}}else{if(num[2]){num[2]--;return true;}else if(num[5]){num[5]--;return true;}else if(num[8]){num[8]--;return true;}else if(num[1] >= 2){num[1] -= 2;return true;}else if(num[1] && num[4]){num[1]--;num[4]--;return true;}else if(num[1] && num[7]){num[1]--;num[7]--;return true;}else if(num[4] >= 2){num[4] -= 2;return true;}else if(num[4] && num[7]){num[4]--;num[7]--;return true;}else if(num[7] >= 2){num[7] -= 2;return true;}}return false;
}
bool findd(int sum)
{if(!num[0] && !num[5])return false;if(!num[0]){num[5]--;last = 5;return cc(sum);}else{num[0]--;last = 0;return cc(sum);}return false;
}
int main()
{int t;//freopen("d:/out.txt", "r", stdin);//freopen("in.txt", "w", stdout);scanf("%d",&t);while(t--){memset(num, 0, sizeof(num));scanf("%s",a);int len = strlen(a);int sum = 0;for(int i = 0; i < len; i++){sum += a[i] - '0';num[a[i]-'0']++;}last = 0;bool flag = findd(sum);int flag2 = 0;if(flag){for(int i = 9; i >= 1; i--){for(int j = 0; j < num[i]; j++){flag2 = 1;printf("%d",i);}}if(flag2){for(int j = 0; j < num[0]; j++){printf("%d",0);}printf("%d\n",last);}elseputs("0");}elseputs("impossible");}return 0;
}


这篇关于spoj 416的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048828

相关文章

力扣416-分割等和子集(Java详细题解)

题目链接:416. 分割等和子集 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话,建议可以去学一学,01背包问题可以说是背包问题的基础。 如果大家感兴趣,我后期可以出一篇专门讲解01背包问题。 dp五部曲。 1.确定dp数组和i

【SPOJ】1825 Free tour II 点分治

传送门:【SPOJ】1825 Free tour II 题目分析:敲了两遍。。。 本题是论文题,具体见漆子超论文《分治算法在树的路径问题中的应用》。 在以root为根的第 i 棵子树上,我们用G[ i ,j ]表示root的第 i 棵子树的路径上严格有 j 个黑点的路径的最长长度。用F[ i ,j ]表示在root为根的第 i 棵子树的路径上不超过 j 个黑点的路径的最长长度。因

【SPOJ】Triple Sums【FFT】

传送门:【SPOJ】Triple Sums 题目分析: 首先我们不考虑 i<j<k i<j<k这个条件,构造多项式: Y=∑xai \qquad\qquad\qquad Y = \sum x^{a_i} 那么 ai+aj+ak=S ai+aj+ak=S的个数即 xai+aj+ak=S x^{a_i+a_j+a_k=S}的个数,等价于 Y3中xS Y^3中x^S的系数。 然后我们考虑容斥

代码随想录算法训练营第35天|背包问题基础、46. 携带研究材料(01背包二维解法)(01背包一维解法)(acm)、416. 分割等和子集

目录 0、背包问题基础01背包 46. 携带研究材料(01背包)1、题目描述2、思路3、code(二维解法)3-1、code(一维解法)4、复杂度分析 416. 分割等和子集1、题目描述2、思路3、code4、复杂度分析 0、背包问题基础 01背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能

代码随想录算法训练营第三十五天| 416. 分割等和子集

416. 分割等和子集 题目: 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2: 输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等

【SPOJ】【AGGRCOW】

总结:函数之间存在依赖。  然后一处修改了但是忘记修改另外的一处了。。。 #include <iostream>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#inclu

day35 | | 01背包问题 二维 01背包问题 一维(二刷) 416. 分割等和子集

代码随想录算法训练营第 35 天| 01背包问题 二维 01背包问题 一维(二刷) 416. 分割等和子集 Leetcode 01背包问题 二维 题目描述: 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 思路: 动态规划 代码: import jav

【0-1背包】力扣416. 分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums = [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2: 输入:nums = [1,2,3,5] 输出:false 解释:数组不能分割成两个元素和相等的子集。 提示: 1 <= nums.

day41| 01背包问题一 01背包问题二(滚动数组篇)416. 分割等和子集 1049.最后一块石头的重量II 494. 目标和 474. 一和零

文章目录 背景介绍01背包问题一思路方法一方法二 01背包问题二(滚动数组篇)思路方法一方法二 416. 分割等和子集思路方法一 1049.最后一块石头的重量II思路方法一 494. 目标和思路方法方法二 回溯法 474. 一和零思路方法 总结 由于笔试的时候会判重,而这里面的代码都是我自己写的,所以以后的博客都要求会员才能看,感谢理解 背景介绍 01背包问题一 01

416.分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 01背包问题:二维dp数组解决 public boolean canPartition(int[] nums){int n = nums.length;int sum = 0;for(int num : nums) sum += num;if(sum % 2 == 1) r