1001 Flooded Island
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=4521
把陆地四面其中三面被海洋环绕的‘@’标记。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 char ma[15][15]; 5 int dir[4][2]={-1,0,1,0,0,-1,0,1}; 6 int main() 7 { 8 memset(ma,'.',sizeof(ma)); 9 int n,m;scanf("%d%d",&n,&m); 10 for(int i=1;i<=n;i++) 11 { 12 getchar(); 13 for(int j=1;j<=m;j++) 14 scanf("%c",&ma[i][j]); 15 } 16 int mini=30,maxi=-1,minj=30,maxj=-1; 17 for(int i=1;i<=n;i++) 18 for(int j=1;j<=m;j++) 19 { 20 int cnt=0; 21 if(ma[i][j]=='X') 22 { 23 for(int k=0;k<4;k++) 24 { 25 int nowi=i+dir[k][0],nowj=j+dir[k][1]; 26 if(ma[nowi][nowj]=='.') cnt++; 27 } 28 if(cnt>=3) ma[i][j]='@'; 29 } 30 if(ma[i][j]=='X') 31 { 32 mini=min(mini,i); 33 maxi=max(maxi,i); 34 minj=min(minj,j); 35 maxj=max(maxj,j); 36 } 37 } 38 //printf("%d %d %d %d\n",mini,maxi,minj,maxj); 39 for(int i=mini;i<=maxi;i++) 40 { 41 for(int j=minj;j<=maxj;j++) 42 printf("%c",ma[i][j]=='X'?'X':'.'); 43 printf("\n"); 44 } 45 }
1002 Buy Tickets
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6018
线段树,我先跑了
1003 Strange fuction
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6052
F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100),给一个y解出F(x)min(x∈[0,100])
求导,二分。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 double f(double x,double y) 5 { 6 return 42*pow(x,6.0)+48*pow(x,5.0)+21*pow(x,2.0)+10*x-y; 7 } 8 double ans(double x,double y) 9 { 10 return 6*pow(x,7.0)+8*pow(x,6.0)+7*pow(x,3.0)+5*x*x-y*x; 11 } 12 int main() 13 { 14 int t;scanf("%d",&t); 15 while(t--) 16 { 17 double y;scanf("%lf",&y); 18 double mid,left=0.0,right=100.0; 19 while(right-left>1e-8) 20 { 21 mid=(left+right)/2.0; 22 if(f(mid,y)<1e-8) left=mid; 23 else right=mid; 24 } 25 printf("%.4f\n",ans(mid,y)); 26 } 27 }
太难了。自动忽略1004。
1005 A sequence of numbers
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6063
看a、b、c是等差数列还是等比数列,然后算第k个。等差数列没话说,等比数列快速幂,注意mod
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int mod=200907; 5 ll f(ll a,ll b) 6 { 7 ll res=1; 8 while(b) 9 { 10 if(b&1) res=(res*a)%mod; 11 b>>=1; 12 a=(a*a)%mod; 13 } 14 return res; 15 } 16 int main() 17 { 18 int t;scanf("%d",&t); 19 while(t--) 20 { 21 ll a,b,c,k,ans;scanf("%lld%lld%lld%lld",&a,&b,&c,&k); 22 if((a+c)==2*b) 23 { 24 ll d=(b-a)%mod; 25 ans=(d*(k-1)+a)%mod; 26 } 27 else{ 28 ll q=(b/a)%mod; 29 ans=(f(q,k-1)*a%mod)%mod; 30 } 31 printf("%lld\n",ans); 32 } 33 }
1006 GCD
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6066
求满足__gcd(i,n)>=k的i的个数,将满足的因子欧拉函数累加
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 int Eular(int n) 5 { 6 int res=n; 7 for(int i=2;i*i<=n;i++) 8 if(n%i==0) 9 { 10 res-=res/i; 11 while(n%i==0) n/=i; 12 } 13 if(n>1) res-=res/n; 14 return res; 15 } 16 int main() 17 { 18 int t;scanf("%d",&t); 19 while(t--) 20 { 21 ll ans=0; 22 int i,n,k;scanf("%d%d",&n,&k); 23 for(i=1;i*i<n;i++) 24 { 25 if(n%i==0) 26 { 27 if(i>=k) ans+=Eular(n/i); 28 if(n/i>=k) ans+=Eular(i); 29 } 30 } 31 if(i*i==n&&i>=k) ans+=Eular(i); 32 printf("%lld\n",ans); 33 } 34 }
1007 Following Orders
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=6080
我又双叒叕跑了
1008 ST Task
角速度v来转这个杆子,第i秒的影子Lcos(v*PI/180.0*i),注意向下取整。
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=2632
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define PI acos(-1) 5 int main() 6 { 7 int l,v;scanf("%d%d",&l,&v); 8 for(int i=0;i<=180/v;i++) 9 { 10 double l1=abs(l*cos(v*PI/180.0*i)); 11 int ll=(int)(l1+0.5); 12 if(v*i<=90) 13 { 14 for(int j=l-ll;j>=1;j--) printf("S"); 15 for(int j=ll;j>=1;j--) printf("T"); 16 for(int j=0;j<l;j++) printf("S"); 17 printf(" %.5f\n",l1*1.0/l*1.0/2.0); 18 } 19 else{ 20 for(int j=0;j<l;j++) printf("S"); 21 for(int j=ll;j>=1;j--) printf("T"); 22 for(int j=l-ll;j>=1;j--) printf("S"); 23 printf(" %.5f\n",l1*1.0/l*1.0/2.0); 24 } 25 } 26 }