水题虽不好,但是很爽
渴望未来某天能把剩下的题补了,先做个记录。
Hard Disk Drive
http://acm.hdu.edu.cn/showproblem.php?pid=4788
单位转化,转一级就转了1000/1024,用pow就ok,答案要百分比就再转化一下。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int t;scanf("%d",&t); 6 for(int kk=1;kk<=t;kk++) 7 { 8 int n; 9 char lev[5]; 10 scanf("%d%s",&n,lev); 11 printf("Case #%d: ",kk); 12 double ans=1000/1024.0; 13 if(lev[1]=='B') ans=0; 14 else if(lev[1]=='K') ans=100-ans*100; 15 else if(lev[1]=='M') ans=100-pow(ans,2)*100; 16 else if(lev[1]=='G') ans=100-pow(ans,3)*100; 17 else if(lev[1]=='T') ans=100-pow(ans,4)*100; 18 else if(lev[1]=='P') ans=100-pow(ans,5)*100; 19 else if(lev[1]=='E') ans=100-pow(ans,6)*100; 20 else if(lev[1]=='Z') ans=100-pow(ans,7)*100; 21 else if(lev[1]=='Y') ans=100-pow(ans,8)*100; 22 printf("%.2f%% ",ans); 23 } 24 }
Just random
http://acm.hdu.edu.cn/showproblem.php?pid=4790
首先知道a+c是最小的b+d是最大的,所以满足条件的且在此区间内的数是有限的,只要求这些满足条件的数的总个数就可以。做矩阵第一行从a+c到a+d,第一列a+c到b+c;最后一行b+c到b+d,最后一列a+d到b+d,以同一列为同一大小数字来稍微偏一下这个矩阵。大概是左三角中矩形右三角的状态。
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll __gcd(ll a,ll b) 5 { 6 return b==0?a:__gcd(b,a%b); 7 } 8 int main() 9 { 10 int t;scanf("%d",&t); 11 for(int kk=1;kk<=t;kk++) 12 { 13 ll a,b,c,d,p,m;scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&c,&d,&p,&m); 14 ll ans=0,posi=(b-a+1)*(d-c+1); 15 if((b-a)>(d-c)) swap(a,c),swap(b,d); 16 ll t1,t2,add1,add2,cnt1,cnt2; 17 t1=(a+c)%p; 18 add1=(m-t1+p)%p; 19 cnt1=(a+c+add1-m)/p; 20 t2=(b+c-1)%p; 21 add2=(t2-m+p)%p; 22 cnt2=(b+c-1-add2-m)/p; 23 ans+=(cnt2-cnt1+1)*(1+add1)+(cnt2-cnt1+1)*(cnt2-cnt1)/2*p; 24 25 t1=(b+c)%p; 26 add1=(m-t1+p)%p; 27 cnt1=(b+c+add1-m)/p; 28 t2=(a+d)%p; 29 add2=(t2-m+p)%p; 30 cnt2=(a+d-add2-m)/p; 31 ans+=(cnt2-cnt1+1)*(b-a+1); 32 33 t1=(a+d+1)%p; 34 add1=(m-t1+p)%p; 35 cnt1=(a+d+1+add1-m)/p; 36 t2=(b+d)%p; 37 add2=(t2-m+p)%p; 38 cnt2=(b+d-add2-m)/p; 39 ans+=(cnt2-cnt1+1)*(1+add2)+(cnt2-cnt1+1)*(cnt2-cnt1)/2*p; 40 41 ll gc=__gcd(ans,posi); 42 printf("Case #%d: %lld/%lld ",kk,ans/gc,posi/gc); 43 } 44 }
Zhuge Liang's Password
http://acm.hdu.edu.cn/showproblem.php?pid=4772
失去理智就是莽啊,一度脑子转不过来!然后就写下了下面这个答案。找到理智了,自己脑补写的转三遍不如人家写的转一遍。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 inline int read(){ 5 int s=0,w=1; 6 char ch=getchar(); 7 while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} 8 while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();} 9 return s*w; 10 } 11 int ma1[35][35],ma2[35][35]; 12 int main() 13 { 14 int n; 15 while(scanf("%d",&n),n) 16 { 17 int maxn=0,ans=0; 18 for(int i=1;i<=n;i++) 19 for(int j=1;j<=n;j++) 20 ma1[i][j]=read(); 21 for(int i=1;i<=n;i++) 22 for(int j=1;j<=n;j++) 23 { 24 scanf("%d",&ma2[i][j]); 25 if(ma2[i][j]==ma1[i][j]) ans++; 26 } 27 maxn=max(maxn,ans); 28 ans=0; 29 for(int i=1;i<=n;i++) 30 for(int j=1;j<=n;j++) 31 if(ma1[i][j]==ma2[j][n-i+1]) ans++; 32 maxn=max(maxn,ans); 33 ans=0; 34 for(int i=1;i<=n;i++) 35 for(int j=1;j<=n;j++) 36 if(ma1[i][j]==ma2[n-i+1][n-j+1]) ans++; 37 maxn=max(maxn,ans); 38 ans=0; 39 for(int i=1;i<=n;i++) 40 for(int j=1;j<=n;j++) 41 if(ma2[i][j]==ma1[j][n-i+1]) ans++; 42 maxn=max(maxn,ans); 43 printf("%d ",maxn); 44 } 45 }
void turn() { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) temp[i][j]=ma2[j][n-i+1]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ma2[i][j]=temp[i][j]; }
Hard code
http://acm.hdu.edu.cn/showproblem.php?pid=4813
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 inline int read(){ 5 int s=0,w=1; 6 char ch=getchar(); 7 while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();} 8 while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();} 9 return s*w; 10 } 11 char str[1005]; 12 int main() 13 { 14 int t;scanf("%d",&t); 15 while(t--) 16 { 17 int n,m;scanf("%d%d",&n,&m); 18 scanf("%s",str); 19 int len=n*m,k=0; 20 for(int i=0;i<n;i++) 21 { 22 for(int j=0;j<m;j++) 23 printf("%c",str[k++]); 24 printf(" "); 25 } 26 } 27 }