选择\(i\)和\(j\),如果\(j = i+xk(x=R)\),可以交换\(i,j\)。任意选择一段长度为k的相加。
题目等价于在下标\(mod\) k 相同的数中选一个最大的。简单模拟。可以用vis标记或者优先队列。
不值一提。
void solve()
{
cin >> n >> k;
priority_queue<int> q[105];
for(int i = 0; i < n; i ++)
{
int x; cin >> x;
q[(i + 1) % k].push(x);
}
ll res = 0;
for(int i = 0; i < k; i ++)
res += q[i].top();
cout << res << '\n';
}
有n个人,他们之间会进行n-1场比赛。将人分成两部分,一部分人赢了\(x\)把,另一部分人赢了\(y\)把。请问是否存在这样的情况,如果有,请输出每一局的胜者。否则输出-1。
可以想到,\(x\)和\(y\)必须有一个是0,且不能都为0。因为如果一个人要赢,一定有一个人会直接输掉(也就是这个直接输的人赢0把)。
判断合法的情况很简单。不过想要输出每一局的胜者需要稍作思考。
void solve()
{
cin >> n >> x >> y;
if(min(x, y) > 0 || max(x, y) == 0) {cout << "-1\n"; return;}
if(x == 0) swap(x, y);
if((n - 1) % x != 0) {cout << "-1\n"; return;}
for(int i = 1; i <= (n - 1) / x; i ++)
for(int j = 1; j <= x; j ++)
cout << 2 + (i - 1) * x << ' ';
cout << '\n';
}
给出一个长度为n的序列。请你在n次操作内将其变为单调不降序列。
操作:选择\(l\)和\(r\),如果\(a_l+a_r\)是偶数,那么\(a_l=a_r\),反之,\(a_r=a_l\)。
对于这类限制操作次数且不要求最少操作次数的问题。我们尽量将思路靠向用完n次操作正好解决问题。每次操作,可以改变一个数,那么我们就能想到把整个序列变成一个数。
我们先把头和尾变成同一个数,不管原来的是哪个都行。然后对于中间的数,根据其加和的奇偶性选择左端点或右端点。
没什么值得注意的,根据思路模拟即可。
void solve()
{
cin >> n;
vector<int> a(n + 1);
for(int i = 1; i <= n; i ++)
cin >> a[i];
if(is_sorted(all(a))) {cout << "0\n"; return;}
cout << n - 1 << "\n";
cout << 1 << ' ' << n << '\n';
int g = ((a[1] + a[n]) & 1 ? a[1] : a[n]);
for(int i = 2; i <= n - 1; i ++)
{
if((g + a[i]) & 1)
cout << 1 << ' ' << i << '\n';
else
cout << i << ' ' << n << '\n';
}
}
给出\(n,x,y\)和两个长度为n的01串。你可以任选两个\(l,r(l<r)\),可以取反\(a_l,a_r\)。在不同的情况下,操作的花费是不同的。1. 当\(l+1=r\)的时候,花费为x。 2.其余情况,花费为y。请问将a变成b的最小花费是多少。
首先我们要想到x和y的操作是可以互换的。比如说,两次y操作可以等价一次x操作。\(a_r-a_l\)次x操作可以等价一次y操作。同时设需要改变的位置有m个。
D1的问题是当\(x>=y\)的时候,求解问题。由于我们知道\(x>=y\),通过贪心的策略我们可以想到我们要尽量地选择操作y。通过手推样例可以发现,除了存在有两个位置不同且这是两个相邻的位置的时候,我们的花费是\(min(x, 2 * y)\),其他的情况下花费都是m / 2 * y。
D2的问题是解除对\(x,y\)间关系的限制。当\(x>=y\)的情况的时候,我们已经在D1求解过了。那么接下来,我们只需要解决\(x<y\)的情况就可以了。发现\(n\)是5000,可以用\(n^2\)的DP算法求解。设状态为\(f[i][j]\),表示在需要改变的位置的序列中,\([l,r]\)的问题还没有解决时,当前的最小花费。直接递推的话,状态不是很好转移,于是选择记忆化搜索来实现这个DP。
谨防爆int以及初始化。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5005;
char s1[N], s2[N];
int n;
ll x, y;
ll f[N][N];
vector<int> a;
void init()
{
for(int i = 0; i <= n; i ++)
for(int j = 0; j <= n; j ++)
f[i][j] = 2e18;
}
ll dfs(int l, int r)
{
if(l > r) return 0;
if(f[l][r] != 2e18) return f[l][r];
ll &v = f[l][r];
if(a[l] + 1 == a[r])
v = min(v, dfs(l + 1, r - 1) + x);
else
v = min(v, dfs(l + 1, r - 1) + y);
v = min(v, dfs(l, r - 2) + min(y, 1ll * (a[r] - a[r - 1]) * x));
v = min(v, dfs(l + 2, r) + min(y, 1ll * (a[l + 1] - a[l]) * x));
return v;
}
void solve()
{
a.clear();
cin >> n >> x >> y;
cin >> s1 >> s2;
for(int i = 0; i < n; i ++)
{
if(s1[i] != s2[i])
a.push_back(i);
}
int m = (int)a.size();
if(m == 0) {cout << "0\n"; return;}
if(m & 1) {cout << "-1\n"; return;}
if(x >= y) //贪心,我们可以全部选择y,除了只有两个相邻位置需要改变的情况。
{
if(m == 2 && a[0] + 1 == a[1])
cout << min(x, 2 * y) << '\n';
else
cout << m / 2 * y << '\n';
}
else //DP
{
init();
cout << dfs(0, m - 1) << '\n';
}
}
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
int _;
cin >> _;
while(_--)
solve();
}
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我知道这篇文章在这里:RubySlim-Howdoyoudefineanelement'sclasswitharailshelperorvariable?我已经尝试了所有三种解决方案。不幸的是,对我来说,没有一个在工作。论坛.rb.panel.panel-heading.span=@forum.name.panel-body.row.col-md-7#{t('global.topic')}.col-md-3.value.title.col-md-1.value.topic.col-md-1.value.dateforum_feed.js.coffeewindow.ForumFeedUI
当验证未通过时,如何停止Rails更改我的代码。每次rails用包裹我的字段...我可以编辑fields_with_error类.fields_with_error{display:inline}这行得通,但它是hacky 最佳答案 没关系。使用CSS而不是这样做。ActionView::Base.field_error_proc=Proc.newdo|html_tag,instance_tag|"#{html_tag}"end我觉得这更hacky:) 关于ruby-on-rails-R
今天想要跟着沐神学习一下循环神经网络,在跑代码的时候,d2l出现了问题,这里记录一下解决的过程,方便以后查阅。李沐《动手学深度学习》d2l——安装和使用安装d2l解决Import“...“couldnotberesolved问题PermissionError:[WinError5]拒绝访问。:'..\\\data'安装d2l下载whl:https://www.cnpython.com/pypi/d2l/dl-d2l-0.15.1-py3-none-any.whl将下载的文件放到这里:在这个文件中右键,选择“在终端中打开”在终端中输入如下命令:condaactivatepytorch_envpi
我有这个div我想要的结果是有没有办法在我的erb中添加类(class)?我试过了但是当它呈现时,它不会逃逸到ruby代码中......和想法? 最佳答案 它与一起%>"> 关于ruby-on-rails-使用RubyonRails将类动态添加到.erb中的div,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3015986/
我遇到了错误undefinedmethod`div'for"11":String"在我提交表单时指向@startdate行。我完全不明白这是怎么回事。如果我在Rails控制台中执行这些步骤,它就可以正常工作。在我的Controller中我有:@startday=params["startday_#{i}".to_sym]@startmonth=params["startmonth_#{i}".to_sym]@startyear=params["startyear_#{i}".to_sym].to_s@endday=params["endday_#{i}".to_sym]@endmont
这是一道简单题题目来自:https://leetcode.cn/problems/two-sum/题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。提示:22nums.length104−109−109nums[i]109−109−109target109只会存在一个有效答案进阶:你可以想出一个时间复杂度小于O(n2)O(n^2)O(n2)的算法吗?示例1:输入:nums=[2,7,11,15],targe
题外话:抑郁场,开局一小时只出A,死活想不来B,最后因为D题出锅ura才保住可怜的分。但咱本来就写不到DB-LongLegs(数论)本题题解法一学自同样抑郁的知乎作者幽血魅影的题解,有讲解原理。法二来着知乎巨佬cup-pyy(大佬说《不难发现》呜呜)题意三种操作:向上走mmm步向右走mmm步给自己一次走的步数加111,即使得m=m+1m=m+1m=m+1问从(0,0)(0,0)(0,0)走到(a,b)(a,b)(a,b)的最小操作次数,值得注意的是操作三不可逆。解析假设我们最终一步的大小增长到mmm,那么在这个过程中我能以[1,m][1,m][1,m](当步数增长到该数时)之间的任何数字向上或
作为Rails的新手(更像是基础设施专家),我正在实现一个仪表板。仪表板将由多个页面组成,每个页面将包含多个图表/表格/等。对于模块化,我希望添加新图表或更改数据View尽可能简单。假设一页有5个不同的图表。我可以让Controller进行5次单独的数据查找,将所有相关数据保存在实例变量中,并呈现5个部分,每个部分都涉及数据的子集。但是看起来更模块化的是有一个“索引”ControllerAction,它的渲染有一堆div,并且对于每个div都有另一个ControllerAction,它进行数据查找并有一个相关的View部分负责管理该数据的View在分区内。因此,如果我要显示包含两个图表