A~E题都是很普通的签到模拟题
【就是这D题题面好长啊,第一遍看硬是没看懂
A. Two Elevators
一共两部电梯,输出哪一部电梯先到
- #include
- using namespace std;
- int main()
- {
- int T;cin>>T;
- while(T--){
- int a,b,c;cin>>a>>b>>c;
- int aa=a-1;int bb=abs(b-c)+c-1;
- if(aa
1<<'\n'; - else if(aa>bb)cout<<2<<'\n';
- else if(aa==bb)cout<<3<<'\n';
- }
-
- return 0;
- }
B. Decode String
把数字转化为字母输出
- #include
- using namespace std;
- int main()
- {
- int q;cin>>q; string s; int n;
- while(q--){
- cin>>n;cin>>s;
- vector<int>v;bool f=0;
- for(int i=0;i
- if(s[i]=='0'&&s[i+1]=='0'){f=1;v.push_back(i-1);i++;}
- else if(s[i]=='0'){v.push_back(i-2);f=1;}
- }
- int q=0;
- for(int i=0;i
- if(q<(int)v.size()&&i!=v[q])cout<<char(s[i]-'0'-1+'a');
- else if(q<(int)v.size()&&i==v[q]){
- cout<<char((s[i]-'0')*10+(s[i+1]-'0')-1+'a');
- q++;i=i+2;
- }
- else cout<<char(s[i]-'0'-1+'a');
- }
- cout<<"\n";
- }
- return 0;
- }
C. Jumping on Tiles
按照字母顺序输出字符位置
- #include
- using namespace std;
- pair<char,int> s[200005];
- bool cmp(pair<char,int> a,pair<char,int> b){
- if(a.first!=b.first)return a.first
- return a.second
- }
- bool cmp1(pair<char,int> a,pair<char,int> b){
- if(a.first!=b.first)return a.first>b.first;
- return a.second
- }
- int main()
- {
- int T;cin>>T;
- while(T--){
- string ss;cin>>ss;
- for(int i=0;i
size();i++){s[i].first=ss[i];s[i].second=i;} - int n=(int)ss.size();
- cout<<abs(ss[0]-ss[n-1])<<' ';
- char st=ss[0],en=ss[n-1];
- vector<int>v;int i=0;
- if(st<=en) sort(s,s+n,cmp);
- else sort(s,s+n,cmp1);
- while(s[i].first!=st)i++;
- while(s[i].first!=en){v.push_back(s[i].second);i++;}
- while(i!=n&&s[i].first==en){v.push_back(s[i].second);i++;}
- cout<<(int)v.size()<<'\n';
- for(int i=0;i
size();i++)cout<1<<" "; - cout<<'\n';
- }
- return 0;
- }
D. Friends and the Restaurant
两头贪心地取一对参加饭局
- #include
- using namespace std;
- int x[200005],y[200005],c[200005];
- int main()
- {
- int T;cin>>T;
- while(T--){
- int n;cin>>n;
- for(int i=0;i
>x[i]; - for(int i=0;i
>y[i];c[i]=x[i]-y[i];} - sort(c,c+n);
- int left=0,right=0;
- int l=0,r=n-1,cnt=0;
- while(l
- if(c[l]+c[r]>0)r--;
- else {cnt++;l++;r--;}
- }
- cout<
'\n'; - }
- return 0;
- }
E. Guess the Cycle Size
题意是猜圈上有多少个点
交互题真的很好玩,就像抽卡一样hhhh
但是忽略了范围是long long
WA了几发
但真的很好玩
- #include
- using namespace std;
- #define int long long
- signed main()
- {
- int left=0,right=0;
- for(int i=2;i<=50;i++){
- cout<<"? "<<1<<" "<>left;
- cout<<"? "<" "<<1<
>right; - if(left==-1||right==-1){cout<<"! "<-1<
return 0;} - else if(left!=right){cout<<"! "<
return 0;} - }
- return 0;
- }
F Kirei and the Linear Function
题意:输入一串数字字符串,输入w,表示字串的长度;输入查询次数m;
字符串从1开始。输入l,r ,表示子串s[l , r],设vv为子串s[l , r]表示的数字,输入k,表示余数。
求 l1 和 l2,使得 s[ l1,l1+w-1]表达的数字*vv+s[ l2,l2+w-1]表达的数字 取模9的余数为k。
思路:1)模9就是加起来等于9就可以了
2)用前缀和可以很快地得到每个s[ i , i+w-1 ] 和 s[ l , r ]表示的数字(设为vv)
3)将上面表示的数字%9的结果用vector储存起来
3)已知vv,可以枚举0~9的数字 a 来列举 a*vv;由此,枚举b,使得(a*vv+b)%9==k
4)将枚举的a和b在vector中找到对应的条件作为答案
5)将答案排个序,找到最小的答案。
代码:
-
- #include
- using namespace std;
- int sum[200005];
- int main()
- {
- int T;cin>>T;string s;int w,m,l,r,k,b;
- while(T--){
- vector<int >v[10];
- cin>>s;s=" "+s;
- for(int i=1;i
size();i++)sum[i]=sum[i-1]+s[i]-'0';//前缀和 - cin>>w>>m;
- for(int i=1;i+w<=s.size();i++){
- int x=(sum[i+w-1]-sum[i-1])%9;
- v[x].push_back(i);
- }
- for(int i=0;i
- vector< pair<int,int> >ans;
- cin>>l>>r>>k; int vv=sum[r]-sum[l-1];
- for(int i=0;i<9;i++){
- if(k>(i*vv)%9)b=(k-(i*vv%9))%9;
- else b=(k+9-(i*vv%9))%9;
- if(v[i].empty()||v[b].empty())continue;
- if(i!=b)ans.push_back({v[i][0],v[b][0]});
- else if(v[i].size()>1)ans.push_back({v[i][0],v[i][1]});
- }
- if(!ans.empty()){
- sort(ans.begin(),ans.end());
- cout<
0].first<<" "<0].second<<'\n'; - }
- else cout<<-1<<" "<<-1<<'\n';
- }
- }
- return 0;
- }
-
相关阅读:
Java设计模式--代理模式
基础DFS与BFS
设置代理服务器
kustomize命令行:修改镜像,添加secret
Sparksql补齐连续工单状态
【计算机图形学入门】笔记3:变换Transformation(二维与三维)
基于QT开发的线性代数初学者的矩阵计算器设计
邮件自动化:简化Workplace中的操作
极光魔链(JMLink)使用教程
自动驾驶感知算法实战2——车载相机及图像处理
-
原文地址:https://blog.csdn.net/zy98zy998/article/details/126891384