CF803

链接:http://codeforces.com/contest/803

A:Maximal Binary Matrix

 1 #include<cstdio>
 2 #include<cstring>
 3 int m[110][110];
 4 
 5 int main()
 6 {
 7     int n,k;
 8     scanf("%d%d",&n,&k);
 9 
10         for(int i=0;i<n&&k;i++)
11         {
12             m[i][i]=1;
13             k--;
14             for(int j=i+1;j<n&&k;j++)
15             {
16                 if(k>=2)
17                 {
18                     m[i][j]=m[j][i]=1;
19                     k-=2;
20                 }
21             }
22         }
23         if(k==0)
24         for(int i=0;i<n;i++)
25             for(int j=0;j<n;j++)
26         {
27             printf("%d%c",m[i][j],(j==n-1?'\n':' '));
28         }
29         else puts("-1");
30 
31 }
View Code

B:Distances to Zero

做的有点蠢。。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=200010;
 6 int a[maxn],d[maxn];
 7 
 8 int main()
 9 {
10     int n;
11     scanf("%d",&n);
12     int last=0;
13     for(int i=0;i<n;i++)
14     {
15         d[i]=0x3f3f3f3f;
16         scanf("%d",&a[i]);
17         if(a[i]==0)
18         {
19             int ct=0;
20             for(int j=i;j>=last;j--)
21                 d[j]=min(ct++,d[j]);
22             last=i+1;
23         }
24     }
25     last=n-1;
26     for(int i=n-1;i>=0;i--)
27     {
28         if(a[i]==0)
29         {
30             int ct=0;
31             for(int j=i;j<=last;j++)
32                 d[j]=min(ct++,d[j]);
33             last=i-1;
34         }
35     }
36     for(int i=0;i<n-1;i++)
37         printf("%d ",d[i]);
38     printf("%d\n",d[n-1]);
39 }
View Code

 C:Maximal GCD

 弄了好久,没有注意数据范围的问题,溢出!!!
 1 #include<cstdio>
 2 #include<cstring>
 3 #define ll long long
 4 
 5 int main()
 6 {
 7     ll n,k;
 8     scanf("%lld%lld",&n,&k);
 9     if(k>1e6) // 当除数为1时用求和公式可算出n最多分成的数字小于1e6
10     {
11         puts("-1");
12         return 0;
13     }
14     ll b=n/(k*(k+1)/2);  //除数小于等于b
15     if(b==0)
16     {
17         puts("-1");
18         return 0;
19     }
20     ll r=1;
21     for(ll x=1;x*x<=n;x++)
22     {
23         if(n%x==0)
24         {
25             if(x<=b&&x>r) r=x;
26             if(n/x<=b&&n/x>r) r=n/x;  // 必要,如(24,2)
27         }
28     }
29     for(int i=1;i<k;i++)
30         printf("%lld ",r*i);
31     n-=r*k*(k-1)/2;
32     printf("%lld\n",n);
33 
34     return 0;
35 }
View Code

 D:Magazine Ad

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<string>
 4 #include<iostream>
 5 using namespace std;
 6 const int maxn=1e9;
 7 int k,n;
 8 string s;
 9 int check(int w)
10 {
11     int ans=0;
12     int l=0;
13     while(l<n)
14     {
15         ans++;
16         int r=l+w;
17         if(r>=n) break;
18         while(r>l&&s[r-1]!=' '&&s[r-1]!='-') r--;
19         if(r==l) return maxn;
20         l=r;
21     }
22     return ans;
23 }
24 int main()
25 {
26     scanf("%d",&k);
27     getchar();
28     getline(cin,s);
29     n=s.length();
30     int l=0,r=n;
31     while(r-l>1)
32     {
33         int m=(l+r)/2;
34         if(check(m)<=k) r=m;
35         else l=m;
36     }
37    printf("%d\n",r);
38     return 0;
39 }
View Code

 

posted @ 2017-04-30 09:26  yijiull  阅读(157)  评论(0编辑  收藏  举报