C- Choose Elements

题目链接

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 300 points

Problem Statement

You are given two sequences, each of length N, consisting of integers: A=(A 1 ,…,AN) and B=(B1,…,BN).
Determine whether there is a sequence of length N, X=(X1 ,…,X N), satisfying all of the conditions below.
Xi=Aior Xi =Bi, for every i(1≤i≤N).
∣Xi−Xi+1∣≤K, for every i(1≤i≤N−1).

Constraints

1≤N≤2×10^5
0≤K≤10^9
1≤Ai,Bi≤10^9
All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K
A 1​… AN
B 1… BN
Output

If there is an X that satisfies all of the conditions, print Yes; otherwise, print No.

Sample Input 1
5 4
9 8 3 7 2
1 6 2 9 5
Sample Output 1
Yes

X=(9,6,3,7,5) satisfies all conditions.

Sample Input 2
4 90
1 1 1 100
1 2 3 100
Sample Output 2
No

No X satisfies all conditions.

思路:

问题转化:让我们求一个序列,使得这个序列是的每一个元素是从A或B中产生,并且当前元素与下一个元素的差值绝对值小于K。

做法:自然可以暴力枚举每一种情况,DFS一遍应该也是可以的。这里我选择dp.dp[n][0]:表示第n个位置是可以填数的,并且这个数是由A序列产生的,dp[n][1]则表示是由B序列产生的,那么对于dp[n + 1][X],我们做一下思考:n+1这个位置能填数的前提是dp[n][1]或dp[n][0]成立,而不同的转移状态又会影响下一次的转移。
直接上代码:

#include <bits/stdc++.h>
 
using namespace std;
 
const int N = 1000010;
int a[N], b[N];
int n, k;
bool f[N][2];//2表示a/b两个数组
 
int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i ++ )   cin >> a[i];
    for (int i = 0; i < n; i ++ )   cin >> b[i];
    
    f[0][0] = f[0][1] = true;//初始的话,第0个位置两个数都可以填,0表示填a,1表示填b
    for (int i = 1; i < n; i ++ )
    {
        if(f[i - 1][0])//如果上一个状态用的是a的位置并且成功了
        {
            if(abs(b[i] - a[i - 1]) <= k)   f[i][1] = true;
            if(abs(a[i] - a[i - 1]) <= k)   f[i][0] = true;
        }
        if(f[i - 1][1])//如果上一个状态用的是b的位置并且成功了
        {
            if(abs(b[i] - b[i - 1]) <= k)   f[i][1] = true;
            if(abs(a[i] - b[i - 1]) <= k)   f[i][0] = true;
        }
    }
    
    for (int i = 1; i < n; i ++ )
        if (!f[i][0] && !f[i][1])
        {
            cout << "No" << endl;
            return 0;
        }
    cout << "Yes" << endl;
    return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
from selenium import webdriver # 导入时间模块 import time # 导入元素定位功能 from selenium.webdriver.common.by import By # driver.find_element_by_css_selector() 4 一定会报错 弃用 3 # 导入数据请求模块 import requests # 数据解析模块 import parsel # 实例化一个浏览器对象 driver = webdriver.Chrome() # 打开浏览器的窗口 driver.get('https://www.jsyks.com/kmy-mnks') # 强制等待 time.sleep(2) # 最大化浏览器的窗口 driver.maximize_window() # 隐式等待 智能 driver.implicitly_wait(10) # elements 返回的是一个列表对象 lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li') # print(len(lis)) # print(lis) for li in lis: time.sleep(0.2) # 优先考虑使用随机数 rid = li.get_attribute('c') # print(rid) url = f'https://tiba.jsyks.com/Post/{rid}.htm' # 获取到响应体对象的文本数据 response = requests.get(url=url).text # 转对象 selector = parsel.Selector(response) answer = selector.css('#question u::text').get() # print(answer) # 重新赋值 if answer == '对': answer = '正确' elif answer == '错': answer = '错误' # else: 不确定的情况 # print(answer) bs = li.find_elements(By.CSS_SELECTOR, 'B') for b in bs: # 获取选项的内容 choose = b.text # print('题目的选项是', choose) # print('正确答案是', answer) # 可能错题 # if answer in choose: # # 正确答案的点击操作 # b.click() if len(choose) > 2: choose = choose[0] if answer == choose: b.click() # 提交试卷 driver.find_element(By.CSS_SELECTOR, '.btnJJ').click() # 添加阻塞 input() # 关闭浏览器 driver.quit()
最新发布
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值