本文共 2874 字,大约阅读时间需要 9 分钟。
A
题目大意
给你两种类型的管道,我们的管道可以旋转90°,为了让我们能让水流动,现在让你判断给定的两条管道,是否可以将水从左上角位置留到右下角位置
题解
dfs分情况搜,当x==0我们只能向右或者向下走 当x=1我们只能向右或者向上走
#includeusing namespace std;int t,n,ff;const int maxn=2e5+10;char s[3][maxn];void dfs(int x,int y,int t){ if(y>=n) return; if(x==1&&y==n-1&&t==3){ ff=1; return; } //向右或者向下 if(x==0){ if(t==2){ if(s[x+1][y]!='1'&&s[x+1][y]!='2') dfs(x+1,y,3); } else if(t==3){ if(s[x][y+1]=='1'||s[x][y+1]=='2') dfs(x,y+1,3); else dfs(x,y+1,2); } } //向右或者向上 else if(x==1){ if(t==2){ if(s[x-1][y]!='1'&&s[x-1][y]!='2') dfs(x-1,y,3); } else if(t==3){ if(s[x][y+1]=='1'||s[x][y+1]=='2') dfs(x,y+1,3); else dfs(x,y+1,2); } }}int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>t; while(t--){ cin>>n; ff=0; cin>>s[0]>>s[1]; //cout< <<" "<<
B
题目大意
将自然数中的偶数与奇数进行划分,先拿奇数再拿偶数,然后求对应位置元素
题解
结论:如果自然数为奇数 那么奇数个数比偶数个数多1,如果自然数为偶数,那么奇数个数等于偶数个数 我们分情况讨论即可
#includeusing namespace std;typedef long long ll;int main(){ ios::sync_with_stdio(false); cin.tie(0); ll n,k; cin>>n>>k; ll m=(n+1)/2; long long cc=0; if(k<=m){ cc=1; for(int i=1;i<=k-1;i++) cc+=2; }else{ k-=m; cc=2; for(int i=1;i<=k-1;i++) cc+=2; } cout< <
C
题目大意
给你n位数,问是否能找到一个n位数被t整除
题解
有一种特殊情况,当n=1并且t=10时,此时应该输出-1 即不存在
其他情况都是能找到的,只是在t的后面加上n-1个0
#includeusing namespace std;int n,t;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>t; if(n==1&&t==10){ cout<<-1<
D
题目大意
给你m,s,分别代表构成数字的长度和值。 例如m=2,s=15,这样可以构成69 , 78,87,96…等等数字。我们只用求出最小的这种数和最大的这种数就行了。
题解
对于给定的m和s 需要进行特殊情况处理-> 如果只有1位数 位数和为0的话 最小和最大都是0 满足条件 但是位数和为0的其它情况就不满足 另外,当位数乘以9之后的结果如果比总和还要小的话也是不满足的
对于最小值的情况,贪心策略如下:尽可能让前面小,不过注意前导0的情况,特殊处理一下就好了 然后对于当前位的数字 就将后面的数字假装填满了9
然后对于最大值的情况,贪心策略如下:从首位开始能放9的直接放9,不能放9的话就取剩下的值即可
#include#define endl '\n'using namespace std;int m,s;string smin,smax;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>m>>s; if(m==1&&s==0){ cout<<0<<" "<<0< 9) cc=9; else cc=ans; ch='0'+cc; smax+=ch; ans-=cc; } cout< <
E
题目大意
国王想要平分钱财,问最少需要多少金币
题解
水题,找到最大的金币,然后求出与其它人的差值总和即可
#includeusing namespace std;typedef long long ll;const int maxn=110;ll a[maxn],n;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; ll remax=-1; for(int i=0;i >a[i]; remax=max(remax,a[i]); } ll ans=0; for(int i=0;i
学如逆水行舟,不进则退
转载地址:https://chocolate.blog.csdn.net/article/details/102159464 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!