当前位置: 首页 > news >正文

Codeforces Round 1004 (Div. 2)(A-E)

题目链接:Dashboard - Codeforces Round 1004 (Div. 2) - Codeforces

A. Adjacent Digit Sums

思路

只有两种情况:n+1之后没有进位,y-x=1。n+1之后进位(y-x-1)%9==0。

代码

void solve(){int x,y;cin>>x>>y;if(y-x==1){cout<<"YES\n";return;}int t=x-y+1;if(t>=0&&t%9==0){cout<<"YES\n";return;}cout<<"NO\n";
}
signed main() {vcoistntint _=1;cin>>_;while(_--) solve();return 0;
}

B. Two Large Bags

思路

设了个1e5没算时间复杂度T了一发。。。。

根据题意的操作,n个x我们可以留下2个分别到两个袋子,n-2个x变成(x+1),一直往下推直到有一个数只有一个那么就不可能得到两个完全相同的袋子,否则则会得到两个相同的袋子

代码

void solve(){int n;cin>>n;vi a(n+10);vi mp(10001,0);for(int i=1;i<=n;i++){cin>>a[i];mp[a[i]]++;}for(int i=1;i<=10000;i++){if(mp[i]>1){mp[i+1]+=(mp[i]-2);}if(mp[i]==1){cout<<"NO\n";return;}}cout<<"YES\n";
}
signed main() {vcoistntint _=1;cin>>_;while(_--) solve();return 0;
}

C. Devyatkino

思路

原来直接暴力就可以了,,,,,

这题是有一定的规律的,首先出现7答案为0,其他我们发现答案最大是7,只要一直加999...,让最高位从0变成7就行对于所有数(题目给定范围n>=10)都成立,剩下的情况我们对每位数变成7要从两个方面考虑,那就是个位的数和其他,

对于个位数变成7,我们只需要一直加9就可将其变为7

对于其他位上的数为x,如果6>=x>=0,那么我们就能加99...使其进位到7,这还与这位数之后的数的大小有关

如果是x=8,例如8002,我们要先将2给消掉加两个9999,变成28000,再加9999变成37999即可

对于x=9我们发现无论怎么操作其结果是>7的

代码

暴力代码(我求求了建议下次把这个给卡掉哈)

bool check(int x){while(x){if(x%10==7) return true;x/=10;}return false;
}
void solve(){int n;cin>>n;int cnt=10;for(int i=1;i<=10;i++){int d=pow(10,i);d--;int x=n;int t=0;while(!check(x)){t++;x+=d;}cnt=min(cnt,t);}cout<<cnt<<"\n";
}
signed main() {vcoistntint _=1;cin>>_;while(_--) solve();return 0;
}

代码2

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define ull unsigned long long
#define bit __builtin_popcount
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){string s;cin>>s;int n=s.size();int ans=7;auto bol=[&](int st)->int{int x=0;for(int i=st+1;i<n;i++){x*=10;x+=(s[i]-'0');}return x;};for(int i=0;i<n;i++){if(s[i]=='7'){ans=0;}}if(s[n-1]=='8') ans=min(ans,1ll);if(s[n-1]=='9') ans=min(ans,2ll);if(s[n-1]=='0') ans=min(ans,3ll);if(s[n-1]=='1') ans=min(ans,4ll);if(s[n-1]=='2') ans=min(ans,5ll);if(s[n-1]=='3') ans=min(ans,6ll);if(s[n-1]=='4') ans=min(ans,7ll);if(s[n-1]=='5') ans=min(ans,8ll);for(int i=0;i<n-1;i++){if(s[i]<='6'&&s[i]>='0'){int t=bol(i);if(t>=('7'-s[i])){ans=min(ans,('7'-s[i])+0ll);}else{ans=min(ans,('7'-s[i])+1ll);}}if(s[i]=='8'){ans=min(ans,bol(i)+1ll);}}cout<<ans<<"\n";
}
signed main() {vcoistntint _=1;cin>>_;while(_--) solve();return 0;
}

D. Object Identification

思路

交互题练的还是少了,赛时没做出来

可以发现如果查询结果出现0那么就一定是A,那么怎么询问能够得到这一结果,因为是有向图,我们只需要找到一个不在a中出现的数x,(x,*)查询如果结果是0则A,否则B。如果a是全排列,即所有数都在a中出现,如果是A的话最多有n条边,那么查询出的结果一定是 <n-1 的,那么我们选择查询(1,n)如果结果 >=n-1 则是B,否则是A

总而言之:

如果a不是全排列,查询(x,*)(其中x是不在a中出现的数,*是除x之外[1,n]的所有数),如果结果是0则是A,否则B

如果a是全排列,查询(1,n)如果结果>=n-1则是B,否则是A

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define ull unsigned long long
#define bit __builtin_popcount
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;int query(int a,int b){cout<<"? "<<a<<" "<<b<<endl;int res;cin>>res;return res;
}void solve(){int n;cin>>n;vi a(n+1);vb b(n+1);for(int i=1;i<=n;i++){cin>>a[i];b[a[i]]=true;}for(int i=1;i<=n;i++){if(b[i]==false){int t=query(i,i==1?2:1);if(t==0){cout<<"! A"<<endl;}else{cout<<"! B"<<endl;}return;}}int x,y;for(int i=1;i<=n;i++){if(a[i]==1) x=i;if(a[i]==n) y=i;}int t1=query(x,y);int t2=query(y,x);if(t1!=t2){cout<<"! A"<<endl;return;}if(t1>=n-1){cout<<"! B"<<endl;}else{cout<<"! A"<<endl;}
}
signed main() {vcoistntint _=1;cin>>_;while(_--) solve();return 0;
}

E. White Magic

思路

我们可以发现的结论:没有0的序列一定成立,有两个0的序列一定不成立

那么答案显然是n-cnt0+1或n-cnt0,(cnt0是0的个数)

关于是否能够将一个0添加进去,我们只需要看最左边的0加进去是否成立即可,因为右边的0成立的话,左边的0一定是成立的

代码

#include<bits/stdc++.h>
using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 
#define int long long
#define ull unsigned long long
#define bit __builtin_popcount
#define lowbit(x) ((x)&-(x))
#define vi vector<int>
#define vb vector<bool>
typedef pair<int,int> pll;const int N=2e5+10;
const int inf=1e18;
const int mod=998244353;void solve(){int n;cin>>n;vi a(n+10);int cnt0=0;map<int,int> mp;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]==0) cnt0++;mp[a[i]]++;}if(mp[0]){mp[0]=1;}else{cout<<n<<"\n";return;}int mex=0;while(mp[mex]) mex++;int mi=inf;for(int i=1;i<=n;i++){if(a[i]==0&&!mp[a[i]]) continue;mp[a[i]]--;if(!mp[a[i]]) mex=min(mex,a[i]);mi=min(mi,a[i]);if(mi<mex){cout<<n-cnt0<<"\n";return;}}cout<<n-cnt0+1<<"\n";
}
signed main() {vcoistntint _=1;cin>>_;while(_--) solve();return 0;
}

http://www.lryc.cn/news/537659.html

相关文章:

  • pnpm的使用
  • vscode调试redis
  • Windows逆向工程入门之汇编指令格式与操作数类型
  • 亚远景-ASPICE 4.0与敏捷开发:如何实现高效协同
  • pptx文档提取信息
  • 蓝桥杯篇---超声波距离测量频率测量
  • ML.Net二元分类
  • vite让每个scss文件自动导入某段内容
  • 分享一个使用的音频裁剪chrome扩展-Ringtone Maker
  • 基于Python的Optimal Interpolation (OI) 方法实现
  • 初学 mybatis
  • 机器学习:k均值
  • 保姆级GitHub大文件(100mb-2gb)上传教程
  • 1.【BUUCTF】[SUCTF 2019]EasyWeb
  • CloudberryDB(七)二级索引
  • P1878 舞蹈课(详解)c++
  • 何须付费免费它不香吗
  • ELK组成及实现原理
  • 【Vue3源码解析】响应式原理
  • servlet中的ServletContext
  • 第1825天 | 我的创作纪念日:缘起、成长经历、大方向
  • 如何在 Mac 上解决 Qt Creator 安装后应用程序无法找到的问题
  • Java 设计模式之迭代器模式
  • 登录演示和功能拆解
  • DeepSeek深度求索API多线程批量写原创文章软件-ai痕迹极低
  • Redis进阶使用
  • Python常见面试题的详解6
  • Linux基础之文件权限的八进制表示法
  • 数据结构与算法面试专题——堆排序
  • 《On Java进阶卷》阅读笔记(五)