分析:遇到1就统计有几个连续的,遇到0若连续的多于一个就输出后面的0
1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 #include "vector" 6 using namespace std; 7 int n; 8 string s; 9 int main() 10 { 11 cin>>n; 12 cin>>s; 13 vector<int>p; 14 for(int i=0;i<n;){ 15 if(s[i]==‘0‘){ 16 if(i==n-1||s[i+1]==‘0‘){ 17 p.push_back(0); 18 } 19 i++; 20 }else{ 21 int cnt=0; 22 while(i<n&&s[i]==‘1‘){ 23 i++; 24 cnt++; 25 } 26 p.push_back(cnt); 27 } 28 } 29 for(int i=0;i<p.size();i++) 30 cout<<p[i]; 31 cout<<endl; 32 }
分析:直接对每个.位置模拟即可
1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 using namespace std; 6 const int maxn=20; 7 string s[maxn]; 8 bool tool(int x,int y){ 9 if(x<0||x>=10||y<0||y>=10) 10 return false; 11 return true; 12 } 13 bool judge(int x,int y){ 14 //横着的 15 int cnt=0; 16 int i,j; 17 i=x,j=y; 18 while(s[i][j]==‘X‘&&tool(i,j)){ 19 i--,cnt++; 20 if(!tool(i,j)) break; 21 } 22 i=x,j=y; 23 while(s[i][j]==‘X‘&&tool(i,j)){ 24 i++,cnt++; 25 if(!tool(i,j)) break; 26 } 27 if(cnt-1>=5) return true; 28 29 //竖着的 30 cnt=0; 31 i=x,j=y; 32 while(s[i][j]==‘X‘&&tool(i,j)){ 33 j--,cnt++; 34 if(!tool(i,j)) break; 35 } 36 i=x,j=y; 37 while(s[i][j]==‘X‘&&tool(i,j)){ 38 j++,cnt++; 39 if(!tool(i,j)) break; 40 } 41 if(cnt-1>=5) return true; 42 43 //主对角线 44 cnt=0; 45 i=x,j=y; 46 while(s[i][j]==‘X‘&&tool(i,j)){ 47 i--,j--,cnt++; 48 if(!tool(i,j)) break; 49 } 50 i=x,j=y; 51 while(s[i][j]==‘X‘&&tool(i,j)){ 52 i++,j++,cnt++; 53 if(!tool(i,j)) break; 54 } 55 if(cnt-1>=5) return true; 56 57 //副对角线 58 cnt=0; 59 i=x,j=y; 60 while(s[i][j]==‘X‘&&tool(i,j)){ 61 i++,j--,cnt++; 62 if(!tool(i,j)) break; 63 } 64 i=x,j=y; 65 while(s[i][j]==‘X‘&&tool(i,j)){ 66 i--,j++,cnt++; 67 if(!tool(i,j)) break; 68 } 69 if(cnt-1>=5) return true; 70 return false; 71 } 72 int main() 73 { 74 for(int i=0;i<10;i++) 75 cin>>s[i]; 76 int flag=0; 77 for(int i=0;i<10;i++){ 78 for(int j=0;j<10;j++){ 79 if(s[i][j]==‘.‘){ 80 s[i][j]=‘X‘; 81 if(judge(i,j)){ 82 flag=1; break; 83 } 84 s[i][j]=‘.‘; 85 } 86 } 87 if(flag) break; 88 } 89 if(flag) cout<<"YES"<<endl; 90 else cout<<"NO"<<endl; 91 }
分析:先按照从小到大排序,在看看序列中比k大2倍的数当中有多少个后一个比前一个的2倍还多
1 #include "iostream" 2 #include "cstdio" 3 #include "cstring" 4 #include "string" 5 #include "algorithm" 6 using namespace std; 7 const int maxn=1000+10; 8 int n; 9 long long k,a[maxn]; 10 int main() 11 { 12 cin>>n>>k; 13 for(int i=0;i<n;i++){ 14 cin>>a[i]; 15 } 16 sort(a,a+n); 17 long long res=k; 18 int cnt=0; 19 for(int i=0;i<n;i++){ 20 if(a[i]<=2*res){ 21 if(a[i]>res){ 22 res=a[i]; 23 } 24 }else{ 25 while(2*res<a[i]){ 26 res*=2; 27 cnt++; 28 } 29 if(a[i]>res){ 30 res=a[i]; 31 } 32 } 33 } 34 cout<<cnt<<endl; 35 }
时间: 2024-10-13 16:48:21