上臺階奇數和偶數分別多少可以實現是從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) B一個圈圈上有好多點,找一個點逆時針走一圈和所有上面點的距離給你。。。再來一個人也是這樣,問他倆是不是在同一個圈圈上
最后一個點和第一個點的距離,是周長-所有其他的點直接距離和。然后遍歷找有沒有完全重合的方式
#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串中每個數字在本串中是第幾小的。?!,F在給你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;}新聞熱點
疑難解答