ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

codeforces round #644 div3

2020-05-25 17:52:27  阅读:260  来源: 互联网

标签:std int void cin codeforces 644 using include div3


链接:https://codeforces.com/contest/1360

A:

假定a为长,b为宽,那么最小正方形的边长就是a和2b的最大值。

 

 1 #include <iostream>
 2 using namespace std;
 3 int main(void)
 4 {
 5     int t;
 6     cin>>t;
 7     while(t--)
 8     {
 9         int a,b;
10         cin>>a>>b;
11         if(a<b)
12         {
13             int temp=b;
14             b=a;
15             a=temp;
16         }
17         int k=max(a,2*b);
18         cout<<k*k<<endl;
19  
20     }
21     return 0;
22 }

 

B:

容易知道所求为数组中两个数的最小差。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 int main(void)
 5 {
 6     int t;
 7     cin>>t;
 8     while(t--)
 9     {
10         int n;
11         int a[100];
12         cin>>n;
13         for(int i=1;i<=n;i++)cin>>a[i];
14         sort(a+1,a+1+n);
15         int minn=100000;
16         for(int i=2;i<=n;i++)
17         {
18             if(a[i]-a[i-1]<minn)minn=a[i]-a[i-1];
19         }
20         cout<<minn<<endl;
21     }
22     return 0;
23 }

C:

先将奇数和偶数分成两组,如果两组的个数都是偶数,那么输出YES;否则因为总个数为偶数,必然两组个数都为奇数。若存在相差1的数,那么将一个多的数加入到少的数中,输出YES;否则输出NO。

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 int main(void)
 5 {
 6     int t;
 7     cin>>t;
 8     while(t--)
 9     {
10         int n,a[1000],odd=0,even=0;
11         cin>>n;
12         for(int i=1;i<=n;i++)
13         {
14             cin>>a[i];
15             if(a[i]%2)odd++;
16             else even++;
17         }
18         if(odd%2==0&&even%2==0)
19         {
20             cout<<"YES"<<endl;
21         }
22         else
23         {
24             sort(a+1,a+1+n);
25             int b=0;
26             for(int i=2;i<=n;i++)
27             {
28                 if(a[i]-1==a[i-1])
29                 {
30                     cout<<"YES"<<endl;
31                     b=1;
32                     break;
33                 }
34             }
35             if(b==0)cout<<"NO"<<endl;
36         }
37     }
38     return 0;
39 }

D:

暴力查找,时间复杂度√n.

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 int t,n,k;
 5 int main(void)
 6 {
 7     cin>>t;
 8     while(t--)
 9     {
10         cin>>n>>k;
11         int ans=n;
12         for(int i=1;i<=k&&i*i<=n;i++)
13         {
14             if(n%i==0)
15             {
16                 if(n/i<=k)
17                 {
18                     ans=i;
19                     break;
20                 }
21                 ans=n/i;
22             }
23         }
24         cout<<ans<<endl;
25     }
26     return 0;
27 }

E:

查找除边界外所有的1,如果在它的右边或者下边没有1,则输出NO.

 

 1 #include <iostream>
 2 using namespace std;
 3 int t,n;
 4 char c[100][100];
 5 int main(void)
 6 {
 7     cin>>t;
 8     while(t--)
 9     {
10         cin>>n;
11         for(int i=0;i<n;i++)
12         {
13             cin>>c[i];
14         }
15         int b=0;
16         for(int i=0;i<n-1;i++)
17         {
18             for(int j=0;j<n-1;j++)
19             {
20                 if(c[i][j]=='1'&&!(c[i+1][j]=='1'||c[i][j+1]=='1'))
21                 {
22                     cout<<"NO"<<endl;
23                     b=1;
24                     break;
25                 }
26             }
27             if(b==1)break;
28         }
29         if(b==0)cout<<"YES"<<endl;
30     }
31     return 0;
32 }

 

 

 

 

F:

(开始想着爆搜,但因为打开方式不对超时了。。)

因为m比较小,可以对第一个字符串每一个位置的所有可能构造一遍,再对剩下字符串遍历是否符合要求,符合即输出;若不存在输出-1.

 1 #include <iostream>
 2 using namespace std;
 3 int t,n,m;
 4 char s[100][100];
 5 int check(char j)
 6 {
 7     int dif=0;
 8     for(int k=0;k<m;k++)if(s[1][k]!=s[j][k])dif++;
 9     return dif>1;
10 }
11 void solve()
12 {
13     cin>>n>>m;
14     for(int i=1;i<=n;i++)cin>>s[i];
15     for(int i=0;i<m;i++)
16     {
17         char c=s[1][i];
18         for(int j=0;j<26;j++)
19         {
20             int b=0;
21             s[1][i]='a'+j;
22             for(int k=2;k<=n;k++)
23             {
24                 if(check(k))
25                 {
26                     b=1;
27                     break;
28                 }
29             }
30             if(b==0)
31             {
32                 cout<<s[1]<<endl;
33                 return;
34             }
35         }
36         s[1][i]=c;
37     }
38     cout<<"-1"<<endl;
39 }
40 int main(void)
41 {
42     cin>>t;
43     while(t--)
44     {
45         solve();
46     }
47     return 0;
48 }

 

G:

若n*a!=m*b,输出NO;否则构造即可。

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 int t,n,m,a,b;
 5 char c[100][100];
 6 int main(void)
 7 {
 8     cin>>t;
 9     while(t--)
10     {
11         cin>>n>>m>>a>>b;
12         if(n*a!=m*b)
13         {
14             cout<<"NO"<<endl;
15             continue;
16         }
17         memset(c,'0',sizeof(c));
18         int j=0;
19         for(int i=0;i<n;i++)
20         {
21             for(int k=a;k>0;k--)
22             {
23                 c[i][j]='1';
24                 j++;
25                 j%=m;
26             }
27         }
28         cout<<"YES"<<endl;
29         for(int i=0;i<n;i++)
30         {
31             for(int j=0;j<m;j++)cout<<c[i][j];
32             cout<<endl;
33         }
34     }
35     return 0;
36 }

 

H:

待补题。。

标签:std,int,void,cin,codeforces,644,using,include,div3
来源: https://www.cnblogs.com/yanying7/p/12958230.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有