SRM710 div1 ReverseMancala(trick)

题目大意,

给定一个有n个点的环,n不超过10,每个点上有一个权重

起始时权重将会给出,然后有2种操作

第一种操作是,选择一个位置i,获得权重w = a[i],把a[i]变成0,然后接下来在环上顺着走,每个数都加1,直到w为0

第二种操作是,选择一个位置i,在换上倒着走,每个数都减去1,然后收集这个权重w,直到遇见0,然后把w填到0里

求一种方案,使得从起始的权重到达终止的权重

不难发现,这两种操作互为逆操作

所以只用第一种操作

先把起始权重全部集中到a[0]

终止权重也全部集中到a[0]

然后最终方案就是方案一加方案二的逆操作

orz

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef vector<int> VI;

VI solve(VI a){
    int n = a.size();
    int sum = 0;
    VI ans;
    for(auto x : a) sum += x;
    while(a[0] != sum){
        for(int i = 1; i < n; i++){
            while(a[i] != 0){
                ans.push_back(i);
                int p = (i+1)%n, t = a[i];
                a[i] = 0;
                while(t){
                    a[p]++;
                    t--;
                    p = (p+1)%n;
                }
            }
        }
    }
    return ans;
}

class ReverseMancala{
public:
    VI findMoves(VI a, VI b){
        VI x = solve(a);
        VI y = solve(b);
        VI z;
        int n = a.size();
        reverse(y.begin(), y.end());
        for(auto X : x) z.push_back(X);
        for(auto X : y) z.push_back(X+n);
        return z;
    }
};
时间: 2024-11-08 21:50:49

SRM710 div1 ReverseMancala(trick)的相关文章

51nod 1851俄罗斯方块(trick)

题目大意:给出一个黑白图,你可以选定一个俄罗斯方块的区域,黑白翻转,问能否变成白图 比较trick的题目, 首先可以想到,奇数个1肯定是无解的,所以考虑偶数个1 可以先讨论n是2的情况 当n为2时,其实除了m也等于2时需要特判外,都是可行的(因为你可以不断地往右侧推进,最后变成4个1) 所以n为偶数也是可行的 n为奇数时,可以把奇数行的1变到偶数行,所以也是可行的 最后就讨论n是1的情况,这个贪心往右侧走即可 (以及掌握了读入的优化技巧) #include <iostream> #includ

SRM div1 MagicNim(博弈论)

题目大意: 给出n+1堆石子,前n堆石子的数量是a[i],最后一堆只有1个石子,但是具有魔力 拿走该石子的一方可以选择接下来是进行普通的Nim游戏还是anti-nim游戏 问是先手必胜还是必败 首先拿全是1的情况熟悉一下规则 如果全是1,那么无论有几堆,先手都是必胜的 因为如果有奇数个1,那么Alice直接拿掉魔力石子,然后选择不改变游戏,那么他还是赢的 如果有偶数个1,那么Alice直接拿掉魔力式子,然后选择改变游戏,于是他还是赢的. 然后回忆一下anti-nim的先手必胜条件(这里的SG不考

Codeforces Round #295 Div1 B(Cubes)

Problem Limits TimeLimit(ms):3000 MemoryLimit(MB):256 M∈[1,105] Xi∈[?109,109] Yi∈[0,109] Look up Original Problem From here Solution 一个点可取,当且仅当,把它取了之后,上面的点不会失去平衡而掉下来. 开两个优先队列q1,q2.q1的顶元素最大,q2的顶元素最小,起初把所有可取的点都放入q1,q2,然后,轮流从q1,q2取点,如果访问过了就取下一个,取出点后,判断这

POJ 3207 Ikki&#39;s Story IV - Panda&#39;s Trick(2-sat)

POJ 3207 Ikki's Story IV - Panda's Trick 题目链接 题意:一个圆上顺序n个点,然后有m组连线,连接两点,要求这两点可以往圆内或圆外,问是否能构造出使得满足所有线段不相交 思路:2-sat,判断相交的建边,一个在内,一个在外,然后跑一下2-sat即可 代码: #include <cstdio> #include <cstring> #include <cstdlib> #include <vector> #include

POJ3207-Ikki&#39;s Story IV - Panda&#39;s Trick(2-SAT)

Ikki's Story IV - Panda's Trick Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7841   Accepted: 2900 Description liympanda, one of Ikki's friend, likes playing games with Ikki. Today after minesweeping with Ikki and winning so many tim

POJ 3207 Ikki&amp;#39;s Story IV - Panda&amp;#39;s Trick(2-sat)

POJ 3207 Ikki's Story IV - Panda's Trick id=3207" target="_blank" style="">题目链接 题意:一个圆上顺序n个点,然后有m组连线,连接两点,要求这两点能够往圆内或圆外.问能否构造出使得满足全部线段不相交 思路:2-sat,推断相交的建边,一个在内.一个在外,然后跑一下2-sat就可以 代码: #include <cstdio> #include <cstring

前端开发笔记(2)css基础(上)

CSS介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化.CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力. <style type="text/css"> span{ color:red;

前端基础(一)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "PingFang SC"; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #000000 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #000000;

Sass学习笔记(补充)

阅读目录 1. Sass和SCSS的区别 2. @while循环 3. @at-root 4. @content 5. 凸显注释 6. CSS输出样式 7. 重置浏览器样式 8. Sass调试和@debug命令.@warn命令 9. 使用Sass时的注意事项 相关链接:Sass学习笔记前篇 Sass关于颜色函数的乐趣 在Sass学习笔记前篇,记载了Sass安装.基本用法.编程语法,在这篇,将补充在前篇未记载的知识. 1. Sass和SCSS的区别 参考链接:http://sass.bootcss