1. 程式人生 > >Educational Codeforces Round 25

Educational Codeforces Round 25

對角線 .com n) 統計 space cout std span codeforce

A題

分析:遇到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 }
View Code

B題

分析:直接對每個.位置模擬即可

技術分享
 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 }
View Code

C題

分析:先按照從小到大排序,在看看序列中比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 }
View Code

Educational Codeforces Round 25