Educational Codeforces Round 31 A B C

本文介绍了一个快速阅读的问题解决方法,通过计算剩余时间来确定完成阅读所需的最少天数。此外,还探讨了一种判断特定条件下日本填字游戏解决方案唯一性的算法。

A. Book Reading
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Recently Luba bought a very interesting book. She knows that it will take t seconds to read the book. Luba wants to finish reading as fast as she can.

But she has some work to do in each of n next days. The number of seconds that Luba has to spend working during i-th day is ai. If some free time remains, she can spend it on reading.

Help Luba to determine the minimum number of day when she finishes reading.

It is guaranteed that the answer doesn’t exceed n.

Remember that there are 86400 seconds in a day.

Input
The first line contains two integers n and t (1 ≤ n ≤ 100, 1 ≤ t ≤ 106) — the number of days and the time required to read the book.

The second line contains n integers ai (0 ≤ ai ≤ 86400) — the time Luba has to spend on her work during i-th day.

Output
Print the minimum day Luba can finish reading the book.

It is guaranteed that answer doesn’t exceed n.

Examples
input
2 2
86400 86398
output
2
input
2 86400
0 86400
output
1

看完书得花t秒,给了你每天的工作秒数,用整天时间减去便是当天看书的时间。

#include <cstdio>  
#include <algorithm>  
#include <cmath>  
#include <iostream>  
#include <map>   
#include <queue>  
#include <cstdlib>  
#include <cstring>  
#include <string>  
#include <ctime>  
#include <vector>  

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;

const ll MOD = 1000000009;
const int INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const db PI = acos(-1);
const db ERR = 1e-8;

#define rep(i, n) for(int i=0;i<n;i++)
const int day =86400;

int main(){
    int n,t;
    cin>>n>>t;
    int a[105];
    rep(i,n)
        cin>>a[i];
    int ans=0;
    rep(i,n){
        t-=day-a[i];
        ans++;
        if(t<=0){
            cout<<ans<<endl;
            return 0;
        }
    }
}

B. Japanese Crosswords Strike Back
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
A one-dimensional Japanese crossword can be represented as a binary string of length x. An encoding of this crossword is an array a of size n, where n is the number of segments formed completely of 1’s, and ai is the length of i-th segment. No two segments touch or intersect.

For example:

  • If x = 6 and the crossword is 111011, then its encoding is an array {3, 2};
  • If x = 8 and the crossword is 01101010, then its encoding is an array {2, 1, 1};
  • If x = 5 and the crossword is 11111, then its encoding is an array {5};
  • If x = 5 and the crossword is 00000, then its encoding is an empty array.

Mishka wants to create a new one-dimensional Japanese crossword. He has already picked the length and the encoding for this crossword. And now he needs to check if there is exactly one crossword such that its length and encoding are equal to the length and encoding he picked. Help him to check it!

Input
The first line contains two integer numbers n and x (1 ≤ n ≤ 100000, 1 ≤ x ≤ 109) — the number of elements in the encoding and the length of the crossword Mishka picked.

The second line contains n integer numbersa1,a2, …,an(1 ≤ ai ≤ 10000) — the encoding.

Output
Print YES if there exists exaclty one crossword with chosen length and encoding. Otherwise, print NO.

Examples
input
2 4
1 3
output
NO
input
3 10
3 3 2
output
YES
input
2 10
1 3
output
NO

给了段数和长度,以及每一段的长度,问是否只有唯一一种情况,只要满足a1+a2+...+an=x-n+1即可

#include <cstdio>  
#include <algorithm>  
#include <cmath>  
#include <iostream>  
#include <map>   
#include <queue>  
#include <cstdlib>  
#include <cstring>  
#include <string>  
#include <ctime>  
#include <vector>  

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;

const ll MOD = 1000000009;
const int INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const db PI = acos(-1);
const db ERR = 1e-8;

#define rep(i, n) for(int i=0;i<n;i++)

int main(){
    int n,x;
    cin>>n>>x;
    int ans=0,a;
    rep(i,n){
        cin>>a;
        ans+=a;
    }
    if(ans==x-n+1)
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
    return 0;
}

C. Bertown Subway
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
The construction of subway in Bertown is almost finished! The President of Berland will visit this city soon to look at the new subway himself.

There are n stations in the subway. It was built according to the Bertown Transport Law:

For each station i there exists exactly one train that goes from this station. Its destination station is pi, possibly pi = i;
For each station i there exists exactly one station j such that pj = i.
The President will consider the convenience of subway after visiting it. The convenience is the number of ordered pairs (x, y) such that person can start at station x and, after taking some subway trains (possibly zero), arrive at station y (1 ≤ x, y ≤ n).

The mayor of Bertown thinks that if the subway is not convenient enough, then the President might consider installing a new mayor (and, of course, the current mayor doesn’t want it to happen). Before President visits the city mayor has enough time to rebuild some paths of subway, thus changing the values of pi for not more than two subway stations. Of course, breaking the Bertown Transport Law is really bad, so the subway must be built according to the Law even after changes.

The mayor wants to do these changes in such a way that the convenience of the subway is maximized. Help him to calculate the maximum possible convenience he can get!

Input
The first line contains one integer number n (1 ≤ n ≤ 100000) — the number of stations.

The second line contains n integer numbers p1, p2, …, pn (1 ≤ pi ≤ n) — the current structure of the subway. All these numbers are distinct.

Output
Print one number — the maximum possible value of convenience.

Examples
input
3
2 1 3
output
9
input
5
1 5 4 3 2
output
17
Note
In the first example the mayor can change p2 to 3 and p3 to 1, so there will be 9 pairs: (1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3).

In the second example the mayor can change p2 to 4 and p3 to 5.

代码转载自:https://pan.quark.cn/s/9cde95ebe57a 横道图,亦称为甘特图,是一种可视化的项目管理手段,用于呈现项目的进度安排和时间框架。 在信息技术领域,特别是在项目执行与软件开发范畴内,横道图被普遍采用来监控作业、配置资源以及保障项目能按时交付。 此类图表借助水平条带图示来标示各个任务的起止时间点,使项目成员与管理者可以明确掌握项目的整体发展状况。 周期表或可指代计算机科学中的“作业调度周期表”或“资源配置周期表”。 在计算机系统中,作业调度是一项核心功能,它规定了哪个进程或线程能够在中央处理器上执行以及执行的具体时长。 周期表有助于系统管理者洞察作业的执行频率和资源使用状况,进而提升系统的运作效能和响应能力。 不仅如此,周期表也可能意指数据处理或研究中的周期性文档,如在金融分析中按期更新的市场信息文档。 在压缩文件“横道图,周期表.zip”内含的“横道图,周期表.doc”文件,很可能是对某个项目或任务管理的详尽阐述,涵盖利用横道图来制定和展示项目的时间进程,以及可能牵涉的周期性作业调度或资源配置情形。 文件或许包含以下部分:1. **项目简介**:阐述项目的目标、范畴、预期成效及参与项目的团队成员。 2. **横道图详述**:具体列出了项目中的各项任务,每个任务的启动与终止时间,以及它们之间的关联性。 横道图通常涵盖关键节点,这些节点是项目中的重要事件,象征重要阶段的实现。 3. **任务配置**:明确了每个任务的责任归属,使项目成员明晰自己的职责和截止日期。 4. **进展更新**:若文件是动态维护的,可能会记录项目的实际进展与计划进展的对比,有助于识别延误并调整计划。 5. **周期表探讨**:深入说明了周期性作业的调度,如定期的会议、报告递交、...
目前关于 Codeforces Educational Round 179 的题解和比赛信息尚未在提供的引用中出现。根据 Codeforces 的常规更新频率以及比赛安排,Educational Rounds 通常会在比赛结束后不久发布官方题解,并且社区中也会有大量用户分享他们的解法和思路。 以下是一个通用的查找方法以及可能的题目类型解析: ### 查找方法 1. **访问 Codeforces 官方网站**:直接前往 Codeforces 的比赛页面,搜索 "Educational Round 179",查看是否已经有官方题解发布。 2. **参考社区资源**:如 AtCoder、TopCoder 或其他 OJ 平台上的用户题解,或者在社交媒体(如 Reddit、Stack Overflow)上查找相关讨论。 3. **使用搜索引擎**:输入关键词如 "Codeforces Educational Round 179 Editorial" 或 "Codeforces Educational Round 179 Solutions",查找博客、论坛等资源。 ### 可能的题目类型及解法示例 根据以往的 Educational Rounds 特点,以下是一些可能的题目类型及其常见解法: #### 1. **字符串处理** - **题目描述**:给定一个字符串,要求判断其是否满足某些条件或进行特定操作。 - **解法**: ```cpp #include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; // 示例:判断字符串是否为回文 bool is_palindrome = true; for (int i = 0; i < s.size() / 2; ++i) { if (s[i] != s[s.size() - i - 1]) { is_palindrome = false; break; } } cout << (is_palindrome ? "YES" : "NO") << endl; return 0; } ``` #### 2. **数学问题** - **题目描述**:涉及数论、组合数学或简单代数问题。 - **解法**: ```cpp #include <bits/stdc++.h> using namespace std; int main() { long long n, k; cin >> n >> k; // 示例:判断 n 是否可以被 k 整除 cout << (n % k == 0 ? "YES" : "NO") << endl; return 0; } ``` #### 3. **贪心算法** - **题目描述**:通过局部最优解构造全局最优解。 - **解法**: ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> a(n); for (int &x : a) cin >> x; sort(a.begin(), a.end()); // 示例:选择最大的元素 cout << a[n - 1] << endl; return 0; } ``` #### 4. **动态规划** - **题目描述**:需要通过状态转移方程解决的问题。 - **解法**: ```cpp #include <bits/stdc++.h> using namespace std; const int MAXN = 1005; int dp[MAXN][MAXN]; int main() { int n; cin >> n; vector<int> a(n); for (int &x : a) cin >> x; // 初始化 for (int i = 0; i <= n; ++i) dp[i][i] = 0; // 状态转移 for (int len = 2; len <= n; ++len) { for (int i = 0; i + len - 1 < n; ++i) { int j = i + len - 1; dp[i][j] = max(a[i] - dp[i + 1][j], a[j] - dp[i][j - 1]); } } cout << dp[0][n - 1] << endl; return 0; } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值