A. Detective Book

题意:一个人读书  给出每一章埋的坑在第几页可以填完 。 一个人一天如果不填完坑他就会一直看 问几天能把这本书看完

思路:模拟一下 取一下过程中最大的坑的页数  如果最大页数等于当前页数 day++即可

 #include<bits/stdc++.h>
using namespace std;
#define FOR(i,f_start,f_end) for(int i=f_start ;i<=f_end;i++)
#define MT(x,i) memset(x,i,sizeof(x))
#define inf 0x3f3f3f3f
#define mkp make_pair
#define all(v) (v).begin(),(v).end()
#define F first
#define S second
#define pii pair<int,int>
#define pb push_back
const int maxn=+;
int a[maxn];
int main(){
int n,k;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int p=,maxnum=;
int cnt=;
while(p<=n){
if(a[p]>=maxnum){
maxnum=a[p];
}
if(p==maxnum){
cnt++;
maxnum=;
}
p++;
}
cout<<cnt<<endl;
return ;
}

B. Good String

题意:给出只含 >  <的字符串  >可以免费把右边的字符删掉  <可以免费把左边的字符删掉  越界就什么都没变化  问不免费删几次可以把该字符串全部变成一种字符

思路: 如果s[0]='>'或者s[n]='<'都是可以直接把一边全部免费删掉的   如果不是这两种情况 那么就找  从左边开始 和s[n] 相等  的最小位置   和从右边开始和s[1]相等的最小位置 哪个小输出哪个

 #include<bits/stdc++.h>
using namespace std;
#define FOR(i,f_start,f_end) for(int i=f_start ;i<=f_end;i++)
#define MT(x,i) memset(x,i,sizeof(x))
#define inf 0x3f3f3f3f
#define mkp make_pair
#define all(v) (v).begin(),(v).end()
#define F first
#define S second
#define pii pair<int,int>
#define pb push_back
const int maxn=+;
char s[maxn];
int main(){
int t;
int n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
scanf("%s",s+);
if(s[]!=s[n]){
if(s[]=='<'){
int ans=;
for(int i=n;i>=;i--){
if(s[i]=='<'){
ans=n-i;break;
}
}
for(int i=;i<=n;i++){
if(s[i]=='>'){
ans=min(i-,ans);
break;
}
}
cout<<ans<<endl;
}
else if(s[]=='>'){
cout<<<<endl;
} }
else {
cout<<<<endl;
} }
return ;
}

C. Playlist

题意 给出n个pair 和k  可以选k个以内的Pair  问最大的  min(first)*(sigma(second))是多少

思路“:直接优先队列升序存second 然后按first 降序排列 n个pair 从最大的Pair开始枚举 每次进优先队列 如果队列超过k 就把 second小的出队即可

比赛的时候想复杂了 想成了还要删除一个点  不知道怎么处理重复  其实删除也可以写 用multiset删除的时候只要删除find回的那个位置的值就不会把相同的全部删掉了

 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<long long ,long long >
#define mkp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn=5e6+;
priority_queue<int,vector<int>,greater<int> >q;
pii a[maxn];
bool cmp(pii a,pii b){
return a.S>b.S;
}
int main(){
int n,k;
scanf("%d%d",&n,&k);
int x,y;
for(int i=;i<=n;i++){
scanf("%d%d",&x,&y);
a[i].F=x;a[i].S=y;
}
sort(a+,a++n,cmp);
q.push(a[].F);
long long sum=a[].F;
long long ans=1ll*a[].F*a[].S;
for(int i=;i<=n;i++)
{
q.push({a[i].F});
sum+=a[i].F;
while(q.size()>k){sum-=q.top();q.pop();}
ans=max(ans,sum*a[i].S);
}
cout<<ans<<endl; return ;
}

D. Minimum Triangulation

题意:给出正n边形 分解成很多个不相交的三角形 并且不相交全覆盖正n边形  n边形角编号逆时针 1--n  三角形的权值为三个角编号乘积 问所有三角形最小乘积和是多少

思路:面向样例编程 每个三角形都从1点出发即可(不会证)

 #include<bits/stdc++.h>
using namespace std;
#define FOR(i,f_start,f_end) for(int i=f_start ;i<=f_end;i++)
#define MT(x,i) memset(x,i,sizeof(x))
#define inf 0x3f3f3f3f
#define mkp make_pair
#define all(v) (v).begin(),(v).end()
#define F first
#define S second
#define pii pair<int,int>
#define pb push_back
const int maxn=+;
char s[maxn];
int main(){
int n,k;
scanf("%d",&n);
long long ans=;
for(int i=;i<=n-;i++){
ans+=1ll*i*(i+);
}
cout<<ans<<endl; return ;
}

E. Palindrome-less Arrays

题意:给定一串数字  不确定的地方用-1 表示 确定的就有确切的数字  不能有大于1的奇回文串 问在-1的地方填数字  可以填1---k 有多少种填法

思路 :由不能有大于1的奇回文串 等价于 奇数序号的数字相邻不能相等 偶数序号的数字相邻不能相等 分解出来即可、

然后进行状态定义 dp[i][0/1]  表示i位置和下一个确定数字的数字相同的填法(第二维是1)  和不同的填法(第二维是0)

需要特殊处理开始和结尾 即 :- 1 -1 -1 -1 A      A表示已经确定的数字  开头的可能性为pow(k-1,有多少个1) 结尾类似

其余的确定数字之前的段可以提取出来分段dp 乘法原理乘起来即可

中间转移为 dp[i][1]=dp[i-1][0]

      dp[i][0]=dp[i-1][0]*(k-2)+dp[i-1][1]*(k-1)

这里其实就是分类讨论的思想 如果dp只有一维的话那么后面的数字就会影响前面 产生后效性

那么怎么取消这种后效性呢?那就是对后面的数字进行分类讨论 相当于已经确定了后面的数字

所以前面填数字的时候就可以根据分类讨论的类别来进行转移 就可以取消后效性了

 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<long long ,long long >
#define mkp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn=2e5+;
const ll mod=;
long long a[maxn];
long long dp[maxn][];
ll n,k;
vector<ll>even,odd;
vector<ll>even_div,odd_div;
long long solve(const vector<ll>&a,const vector<ll>&div,int flag){
long long ans=;
if(div.size()==){
ans=k;
ans%=mod;
for(int i=;i<a.size();i++){
ans*=(k-);
ans%=mod;
}
return ans;
}
if(div[]!=){
for(int i=;i<div[];i++){
ans*=(k-);
ans%=mod;
}
}
MS(dp,);
for(int z=;z<div.size()-;z++){
//cout<<a[div[z]]<<" what ? "<<a[div[z+1]]<<endl;
if(a[div[z]]!=a[div[z+]]){
dp[div[z]][]=;
dp[div[z]][]=;
}
else dp[div[z]][]=,dp[div[z]][]=;
}
for(int z=;z<div.size();z++){
//int zz=0;
if(a[div[z-]]!=a[div[z]])dp[div[z-]][]=;
for(int i=div[z-]+;i<div[z];i++){
// zz=1;
//if(i!=div[z]-1)dp[i][0]=(((dp[i-1][1]+dp[i-1][0])%mod)*(k-1)%mod);
dp[i][]=(((dp[i-][]*(k-)%mod)+(dp[i-][]*(k-)%mod))%mod);
// cout<<i<<" ?? "<<dp[i-1][0]<<" fuck "<<dp[i-1][1]<<endl;
dp[i][]=dp[i-][]%mod; }
ans=((ans*dp[div[z]-][])%mod);
}
for(int i=div[div.size()-]+;i<a.size();i++){
ans*=(k-);
ans%=mod;
}
//cout<<ans<<endl;
return ans;
}
int main(){
scanf("%lld%lld",&n,&k);
FOR(i,,n)scanf("%lld",&a[i]);
for(int i=;i<=n;i+=){
odd.push_back(a[i]);
}
for(int i=;i<=n;i+=){
even.push_back(a[i]);
}
for(int i=;i<odd.size();i++){
if(odd[i]!=-)odd_div.push_back(i);
if(i!=&&odd[i]==odd[i-]&&odd[i]!=-){
cout<<<<endl;
return ;
} }
for(int i=;i<even.size();i++){
if(i!=&&even[i]==even[i-]&&even[i]!=-){
cout<<<<endl;
return ;
}
if(even[i]!=-)even_div.push_back(i);
}
long long temp1,temp2;
temp1=solve(odd,odd_div,);
temp2=solve(even,even_div,);
cout<<((temp1%mod)*(temp2%mod))%mod<<endl;
return ;
}

Educational Codeforces Round 62 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 62 (Rated for Div. 2) Solution

    最近省队前联考被杭二成七南外什么的吊锤得布星,拿一场Div. 2恢复信心 然后Div.2 Rk3.Div. 1+Div. 2 Rk9,rating大涨200引起舒适 现在的Div. 2都怎么了,最难题 ...

  2. Educational Codeforces Round 62 (Rated for Div. 2) C 贪心 + 优先队列 + 反向处理

    https://codeforces.com/contest/1140/problem/C 题意 每首歌有\(t_i\)和\(b_i\)两个值,最多挑选m首歌,使得sum(\(t_i\))*min(\ ...

  3. Educational Codeforces Round 62 (Rated for Div. 2)C

    题目链接 :C. Playlist #include<bits/stdc++.h> using namespace std; #define maxn 300005 #define LL ...

  4. Educational Codeforces Round 62 (Rated for Div. 2) - C Playlist

    当时题意看错了...不过大致思路是对的,唯一没有想到的就是用优先队列搞这个东西,真是不该啊... 题意大概就是,有N首歌,N首歌有两个东西,一个是长度Ti,一个是美丽值Bi,你最多可以选择K首歌, 这 ...

  5. C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列

    C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  6. Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)

    #include<bits/stdc++.h>using namespace std;const long long mod=998244353;long long f[200007][2 ...

  7. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  8. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  9. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

随机推荐

  1. .net core实践系列之SSO-同域实现

    前言 SSO的系列还是以.Net Core作为实践例子与大家分享,SSO在Web方面复杂度分同域与跨域.本篇先分享同域的设计与实现,跨域将在下篇与大家分享. 如有需要调试demo的,可把SSO项目部署 ...

  2. Item 18: 使用srd::unique_ptr来管理独占所有权的资源

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 当你需要一个智能指针的时候,std::unique_ptr通常是最 ...

  3. RabbitMQ 发布订阅

    互联网公司对消息队列是深度使用者,因此需要我们了解消息队列的方方面面,良好的设计及深入的理解,更有利于我们对消息队列的规划. 当前我们使用消息队列中发现一些问题: 1.实际上是异步无返回远程调用,由发 ...

  4. 接口自动化框架(Pytest+request+Allure)

    前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱. 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试. 本次文章着重介绍第一种, ...

  5. 爱奇艺2017秋招笔试(C++智能设备方向)

    虽然有方向,但是好像题目都是随机题库抽取. 选择题都很基础...挖坑,待更新 编程: 一. 奇异数: 如果一个数字满足以下条件,我们就称它为奇异数: 1.   这个数字至少有两位 2. 这个数的最低两 ...

  6. Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包

    1.UDP通信编解码类 (1) 类 # ------------------UDP通信解码编码类------------------------ from socket import * class ...

  7. Python之操作redis数据库

    使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...

  8. MySQL 优化集锦

    case 1: 如果筛选or条件有多个的时候,应该将最好判断的放在最前面,将最不好判断的放在最后面 比如,有一个学生表,想要找出其中年龄是20岁,住址中包含666这个数字的记录.可以下面这两个方案: ...

  9. node学习: package.json

    package.json 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据) 1.创建 package.json npm init npm init –yes 2.p ...

  10. PHP常见错误汇总

    日常开发和调试的时候,经常会遇到一些错误,光怪陆离的不知所以,所以,特此将错误汇总一下,借鉴!!! 1. 原因分析:  一般可能是该文件出现了问题,检查一下代码和格式,是否出现开始的地方出现了空格,或 ...