CF 1136A 1136B 1136C 1136D 1136E(Round546ABCDE)题解
2024-09-01 20:26:30
题目地址:https://codeforces.com/contest/1136
题解:挨个判断即可,水题。
参考代码:
#include<bits/stdc++.h>
using namespace std;
int n,l[],r[],k; int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%d%d",&l[i],&r[i]);
scanf("%d",&k);
for(int i=;i<=n;++i)
{
if(k>=l[i] && k<=r[i]) { cout<<n-i+<<endl; break;}
} return ;
}
B:Nastya Is Playing Computer Games
题解:找规律。ans=3*n+min(k-1,n-k);
参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
int n,k;
int main()
{
scanf("%d%d",&n,&k);
int a=min(k-,n-k);
printf("%d\n",*n+a); return ;
}
C:Nastya Is Transposing Matrices
题解:如果两个位置的数可以交换,则他们的横纵坐标的和相同。我们用mp[x][0]:表示横纵坐标和为x的数量,然后mp[x][i] (i>=1):表示横纵坐标和为x的数字有哪些,
然后徐排序依次比较即可;
参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int Max = 5e2 + ;
const int mod = 1e9 + ;
int map1[*Max][Max],map2[*Max][Max]; bool cmp(int index)
{
for (int i=; i<= map1[index][];i++)
{
if(map1[index][i]!=map2[index][i])
return false;
}
return true;
} int main()
{
int n, m;
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(map1,,sizeof(map1));
memset(map2,,sizeof(map2));
for (int i = ; i <= n; i++)
{
for (int j=;j<=m;j++)
{
int x;
scanf("%d", &x);
map1[i+j][++map1[i+j][]]=x;
}
}
for (int i=;i<=n;i++)
{
for (int j=;j<=m;j++)
{
int x;
scanf("%d", &x);
map2[i+j][++map2[i+j][]]=x;
}
}
bool ok=true;
for(int i=;i<=n+m;i++)
{
sort(map1[i]+,map1[i]++map1[i][]);
sort(map2[i]+,map2[i]++map2[i][]);
if(!cmp(i)){ok = false;break;}
}
if(ok) printf("YES\n");
else printf("NO\n");
}
return ;
}
题解:神奇的贪心。我们先记录每个位置的贡献值,从最后一个位置的数开始,如果num[ pos[i] ]>=n-ans-i则ans++,否则,用前面一个位置的数继续更新num数组;
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define PI acos(-1.0)
#define mkp make_pair
#define pb push_back
#define fi first
#define se second
typedef pair<int,int> pii;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int maxn=3e5+;
const int maxm=5e5+;
int n,m,ans;
int pos[maxn],num[maxn];
vector<int> v[maxn];
int main()
{
scanf("%d%d",&n,&m);
memset(num,,sizeof(num)); ans=;
for(int i=;i<=n;++i) scanf("%d",&pos[i]);
for(int i=;i<=m;++i)
{
int x,y;
scanf("%d%d",&x,&y);
v[y].pb(x);
}
for(auto &i:v[pos[n]]) num[i]++; for(int i=n-;i>;--i)
{
if(num[pos[i]]>=n-ans-i) ans++;
else {for(auto &ii:v[pos[i]]) num[ii]++;}
}
printf("%d\n",ans); return ;
}
E:Nastya Hasn't Written a Legend
题解:
参考代码:
#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const LL lt = -1e18;
const int INF = 0x3f3f3f3f;
const int MXN = 1e5 + ; int n, m;
LL ar[MXN], kr[MXN], kk[MXN];
LL sum[MXN<<],flag[MXN<<],Max[MXN<<];
void build(int l,int r,int rt)
{
flag[rt]=lt;
if(l==r)
{
sum[rt]=ar[l]-kr[l-];
return;
}
int mid=(l+r)>>;
build(l,mid,rt<<);build(mid+,r,rt<<|);
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void push_down(int l,int mid,int r,int rt)
{
if(flag[rt]==lt) return;
flag[rt<<]=flag[rt];
flag[rt<<|]=flag[rt];
sum[rt<<]=flag[rt]*(mid-l+);
sum[rt<<|]=flag[rt]*(r-mid);
flag[rt]=lt;
}
void update(int L,int R,LL v,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
flag[rt]=v;
sum[rt]=v*(r-l+);
return;
}
int mid=(l+r)>>;
push_down(l,mid,r,rt);
if(L>mid) update(L,R,v,mid+,r,rt<<|);
else if(R<=mid) update(L,R,v,l,mid,rt<<);
else update(L,mid,v,l,mid,rt<<),update(mid+,R,v,mid+,r,rt<<|);
sum[rt]=sum[rt<<]+sum[rt<<|];
}
LL query(int L,int R,int l,int r,int rt)
{
if(L>R) return ;
if(L<=l&&r<=R) return sum[rt];
int mid=(l+r)>>;
push_down(l,mid,r,rt);
if(L>mid) return query(L,R,mid+,r,rt<<|);
else if(R<=mid) return query(L,R,l,mid,rt<<);
else return query(L,mid,l,mid,rt<<)+query(mid+,R,mid+,r,rt<<|);
}
int main()
{
scanf("%d", &n);
for(int i=;i<=n;++i) scanf("%lld",&ar[i]);
for(int i=;i<n;++i) scanf("%lld",&kr[i]);
for(int i=;i<n;++i) kr[i]+=kr[i-];
for(int i=;i<n;++i) kk[i]=kk[i-]+kr[i];
build(,n,);
int Q; scanf("%d", &Q);
char s[]; int l, r;
while(Q --)
{
scanf("%s%d%d",s,&l,&r);
if(s[] == 's')
printf("%lld\n",query(l,r,,n,)+kk[r-]-(l>=?kk[l-]:));
else
{
int L=l,R=n,mid,ans=l;
ar[l]=query(l,l,,n,)+r;
while(L<=R)
{
mid=L+R>>;
if(ar[l]>query(mid,mid,,n,)) ans=mid,L=mid+;
else R=mid-;
}
update(l,ans,ar[l],,n,);
}
}
return ;
}
最新文章
- 初入网络系列笔记(5)FTP协议
- Python函数参数学习笔记
- angular学习笔记,很乱哈哈。
- HoloLens开发手记 - Unity之摄像头篇
- 一个完整的编译器前端-A.1 源语言
- mysql 调用带返回值的存储过程
- 20169210《Linux内核原理与分析》第十二周作业
- H5学习之旅-H5的布局(10)
- Solr 13 - 在URL地址栏中操作Solr集群 - 包括CRUD、别名、切割分片、更新配置
- day23单例模式 , 日志处理 , 项目结构目录
- JS将图片转为base64
- python_打包成exe
- 每个JavaScript工程师都应懂的33个概念
- Confluence 6 自定义空间布局
- Grape教程-params
- Java WEB应用开发
- iBrand 开源电商小程序 (Laravel API+ webpack + gulp + 原生小程序)
- postgreysql
- Displaying Modal Window Messages in Oracle Forms Using Show_Alert
- eclipse4.3 解决没有check out as maven project