上台阶奇数和偶数分别多少可以实现是从a到b连着上的(a>=1)
0,0不可以,至少上了一节
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;void init(){ int a,b; scanf("%d%d",&a,&b); if(a == 0&& b == 0) PRintf("NO/n"); else if(b-a == 1||b-a == 0||a-b == 1) printf("YES/n"); else printf("NO/n");}int main(){ init(); return 0;}一个圈圈上有好多点,找一个点逆时针走一圈和所有上面点的距离给你。。。再来一个人也是这样,问他俩是不是在同一个圈圈上
最后一个点和第一个点的距离,是周长-所有其他的点直接距离和。然后遍历找有没有完全重合的方式
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[110],c[110];void init(){ int b,n,l,bu; bu = 0; scanf("%d%d",&n,&l); for(int i = 0 ; i < n ; i++){ scanf("%d",&b); a[i] = b-bu; bu = b; } bu = 0; a[0] += l-b; for(int i = 0; i < n ; i++){ scanf("%d",&b); c[i] =b- bu; bu = b; } c[0] += l-b; for(int i = 0; i < n ; i++){ int j = 1,k = i; for(j = 0; j < n ; j++){ if(a[k] != c[j]) break; else { k = (k+1)%n; } } if(j == n){ printf("YES/n"); return; } } printf("NO/n");}int main(){ init(); return 0;}一个密码必须有数字,字母,符号。。给你几个字符串,可以左移或者右移这个字符串,问最后最少多少步能让所有字符串的首字母成为合法密码
找到每个数字。字母。符号需要移动的最少次少和第三少,这样就算都是一个字符串,也可以取到不同的字符串的最少。维护三小值
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef pair<int,int> pii;int n,m,pos;char s[60][60];int szz[60],zmm[60],fhh[60],szmin,zmmin,fhmin;pii sz[4],zm[4],fh[4];void init(){ scanf("%d%d",&n,&m); for(int i = 0 ; i <= n ; i++) szz[i] = zmm[i] = fhh[i] = (1<<30); for(int i = 1; i <= 3; i++) sz[i].second = zm[i].second = fh[i].second = (1<<30); for(int i = 1 ;i <= n; i++){ scanf("%s",s[i]); for(int j = 0 ; j < m ; j++){ pos = min(j,m-j); if(s[i][j] >= '0'&&s[i][j] <= '9') szz[i] = min(szz[i],pos); else if(s[i][j] >= 'a' && s[i][j] <= 'z') zmm[i] = min(zmm[i],pos); else if(s[i][j] == '#'||s[i][j] == '*'||s[i][j] == '&') fhh[i]= min(fhh[i],pos); } // printf("sz %d second = %d/n",szz[i],sz[3].second); if(szz[i] < sz[3].second) sz[3].first=i,sz[3].second=szz[i]; if(szz[i] < sz[2].second) swap(sz[2],sz[3]); if(szz[i] < sz[1].second) swap(sz[1],sz[2]); if(zmm[i] < zm[3].second) zm[3].first=i,zm[3].second=zmm[i]; if(zmm[i] < zm[2].second) swap(zm[2],zm[3]); if(zmm[i] < zm[1].second) swap(zm[1],zm[2]); if(fhh[i] < fh[3].second) fh[3].first=i,fh[3].second=fhh[i]; if(fhh[i] < fh[2].second) swap(fh[2],fh[3]); if(fhh[i] < fh[1].second) swap(fh[1],fh[2]); } int ans = (1<<30); for(int i = 1; i <= 3; i++) for(int j = 1; j <= 3; j++) for(int k = 1; k <= 3; k++) if(sz[i].first!=zm[j].first && zm[j].first != fh[k].first &&sz[i].first != fh[k].first && sz[i].second!=(1<<30) &&zm[j].second!=(1<<30)&&fh[k].second!=(1<<30)) ans = min(ans,sz[i].second+zm[j].second+fh[k].second); printf("%d/n",ans);}int main(){ init(); return 0;}n是4个串长度,三个串满足关系: ci = bi - ai,p串是c串中每个数字在本串中是第几小的。。。现在给你p串和a串,问b串是否满足每个数字在l r 之间,且能让产生c串有p串的顺序
l- min(a[i])+a[i] <= b[i] <= r- max(a[i])+a[i] 满足这个左右关系就是可以的,每个bi都直接给左边或者右边
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,LL,RR,l,r;const int maxn = 1e5+10;int a[maxn],c[maxn];void init(){ int minn = (1<<30); int maxx = -(1<<30); scanf("%d%d%d",&n,&l,&r); for(int i = 1; i <= n ; i++) scanf("%d",&a[i]); for(int i = 1; i <= n ; i++){ int s; scanf("%d",&s); c[i] = n-s; a[i] -= c[i]; minn = min(minn,a[i]); maxx = max(maxx,a[i]); } if(l-minn <= r-maxx){ for(int i = 1; i <= n ; i++) printf("%d ",l-minn+a[i]); } else printf("-1/n");}int main(){ init(); return 0;}新闻热点
疑难解答