Codeforces Round 912 (Div. 2)
A. Halloumi Boxes
题意:长度为n的数组,你可以逆转最多k长度,问你能不能是数组递增
思路:如果k>=2那么每个数都可以两两交换,如果下表1的地方是1就一定可以,k=1的话单独讨论
using namespace std;
void solve(){
int n,k;
cin>>n>>k;
vector<int>a(n+1);
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(k>1){
cout<<"YES\n";
}else{
for(int i=2;i<=n;i++){
if(a[i]<a[i-1]){
cout<<"NO\n";
return;
}
}
cout<<"YES\n";
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}
B. StORage room
题意是:给定一个n*n矩阵,找到一个数组a使得
如果不存在就输出-1
思路:
#include<bits/stdc++.h>
using namespace std;
int a[1005][1005];
int b[1005];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
b[i]=-1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j){
if(b[i]==-1)b[i]=a[i][j];
else b[i]&=a[i][j];
}
}
}
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
if((b[i]|b[j])!=a[i][j]){
cout<<"NO\n";
return;
}
}
}
cout<<"YES\n";
for(int i=1;i<=n;i++){
cout<<max(0,b[i])<<" ";
}
cout<<"\n";
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}
C. Theofanis' Nightmare
题意是:给定一个数组,将数组划分为子数组,按照本题的定义可以得出一个数值
如图所示
思路:如果是i*sum[i],那么是不是可以把问题转化为这个sum[i]加了i次呢,将乘法转化为了加法。又因为从前往后不知道该怎么划,那么从后往前划即可,为使答案尽可能的大,如果sum>0就划分为一个新的区间
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int a[N];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int ans=0;
int sum=0;
for(int i=n;i>=1;i--){
sum+=a[i];
if(sum>0||i==1){
ans+=sum;
}
}
cout<<ans<<"\n";
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t=1;
cin>>t;
for(int i=1;i<=t;i++)solve();
return 0;
}
本文作者:yufan1102
本文链接:https://www.cnblogs.com/yufan1102/p/17873336.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
Codeforces之路
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步