2019/10/26 TZOJ

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 }
View Code

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 }
View Code

太难了。自动忽略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 }
View Code

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 }
View Code

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 }
View Code

猜你喜欢

转载自www.cnblogs.com/Aaaamber/p/11754406.html