链接:http://codeforces.com/contest/803
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?' ':' ')); 28 } 29 else puts("-1"); 30 31 }
做的有点蠢。。
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 ",d[n-1]); 39 }
弄了好久,没有注意数据范围的问题,溢出!!!
View Code
View Code
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); 33 34 return 0; 35 }
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 ",r); 38 return 0; 39 }