哈尔滨工程大学ACM预热赛
Problem A
https://ac.nowcoder.com/acm/contest/554/A
題解:
找規(guī)律
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans[N],cnt,flag,temp,sum; int a[N][N][N*N]; char str; struct node{}; void add (int b[],int c[]){int x=max(b[0],c[0]);for(int i=1;i<=x;i++){b[i]=b[i]+c[i];}for(int i=1;i<=x+100;i++){if(b[i]>=10){b[i+1]+=b[i]/10;b[i]%=10;}if(b[i]){b[0]=max(b[0],i);}}} int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);//while(t--){scanf("%d",&n);a[1][1][0]=1;a[1][0][0]=1;a[1][1][1]=1;a[1][0][1]=1;for(int i=2;i<=n;i++){a[i][0][0]=1;a[i][0][1]=1;for(int j=1;j<=i;j++){for(int k=0;k<=j;k++){add(a[i][j],a[i-1][k]);}//printf("%d%c",a[i][j]," \n"[i==j]);}}ans[0]=1;for(int i=1;i<=n;i++){add(ans,a[n][i]);}for(int i=ans[0];i>=1;i--)printf("%d",ans[i]);cout<<endl;//}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }Problem B
https://ac.nowcoder.com/acm/contest/554/B
題解:
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=10+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; int a[N][N]; char str; struct node{}; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);scanf("%d",&t);while(t--){//scanf("%d",&n);for(int i=0;i<3;i++){for(int j=0;j<3;j++){scanf("%d",&a[i][j]);}}ans=a[0][0]*a[1][1]*a[2][2]+a[1][0]*a[2][1]*a[0][2]+a[2][0]*a[0][1]*a[1][2]-a[0][2]*a[1][1]*a[2][0]-a[1][2]*a[2][1]*a[0][0]-a[2][2]*a[0][1]*a[1][0];cout<<(ll)ans*ans<<endl;}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }Problem C
https://ac.nowcoder.com/acm/contest/554/C
題解:快速冪
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100000+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; int a,b; char str; struct node{}; int PowerMod(int a, int b, int c){int ans = 1;a = a % c;while(b>0){if(b % 2 == 1)ans = (ans * a) % c;b >>= 1;a = (a * a) % c;}return ans; }int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);scanf("%d",&t);while(t--){scanf("%d%d%d",&a,&n,&b);cout<<PowerMod(a,n,b)<<endl;}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }Problem D
https://ac.nowcoder.com/acm/contest/554/D
題解:
Problem E
https://ac.nowcoder.com/acm/contest/554/E
題解:樸素
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100000+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v; int ans,cnt,flag,temp,sum; int a,b,c,y; char str; struct node{}; bool check(int y){return y%4==0&&y%100!=0||y%400==0; } int mo[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);//while(t--){while(~scanf("%d%d%d%d",&a,&b,&c,&y)){int week=1;int num=1;ans=0;int year,month,day;for(int i=1850;i<=y;i++){int f=check(i);for(int j=1;j<=12;j++){num=0;for(int k=1;k<=mo[f][j];k++){week++;if(week>7)week=1;if(week==c)num++;if(i==y&&j==a&&b==num&&week==c){ans=1;year=i;month=j;day=k;break;}}}}if(ans){printf("%d/",year);if(month<10)printf("0%d/",month);elseprintf("%d/",month);if(day<10)printf("0%d\n",day);elseprintf("%d\n",day);}else{cout<<"none"<<endl;}}//}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }Problem F
https://ac.nowcoder.com/acm/contest/554/F
題解:
Problem G
https://ac.nowcoder.com/acm/contest/554/G
題意:原題? 求區(qū)間內(nèi) 能被 自己每位上的和整除(即模 ==0)的個(gè)數(shù)
題解:
枚舉每位上的和 MOD 取值[1,81]?
就轉(zhuǎn)化為 區(qū)間內(nèi) 能被 MOD整除以及 每位上的和等于MOD 的個(gè)數(shù)
Problem H
https://ac.nowcoder.com/acm/contest/554/H
題解:歐拉篩
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int #define endl "\n" using namespace std; typedef long long ll; //typedef __int128 lll; const int N=1000000+10; const int M=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; int t,n,m,k,p,l,r,u,v,a,b; int ans,cnt,flag,temp,sum; int pre[N]; bool prime[N]; int d[N]; int num[N]; char str; struct node{}; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endif//ios::sync_with_stdio(false);//cin.tie(0);//cout.tie(0);//scanf("%d",&t);prime[0]=prime[1]=1;d[1]=1;for(int i=2;i<N;i++){if(prime[i]==0){pre[++cnt]=i;d[i]=2;num[i]=1;}for(int j=1;j<=cnt&&i*pre[j]<N;j++){prime[i*pre[j]]=i;d[i*pre[j]]=d[i]*d[pre[j]];num[i*pre[j]]=1;if(i%pre[j]==0){num[i*pre[j]]=num[i]+1;d[i*pre[j]]=d[i]/(num[i*pre[j]])*(num[i*pre[j]]+1);break;}}//cout<<phi[i]<<endl;}scanf("%d",&t);while(t--){scanf("%d%d%d",&n,&a,&b);ans=0;for(int i=a;i<=b;i++){if((d[i])%2==0){ans++;}}cout<<ans<<endl;}#ifdef DEBUGprintf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC); #endif//cout << "Hello world!" << endl;return 0; }Problem I
https://ac.nowcoder.com/acm/contest/554/I
Problem J
https://ac.nowcoder.com/acm/contest/554/J
總結(jié)
以上是生活随笔為你收集整理的哈尔滨工程大学ACM预热赛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Training little cats
- 下一篇: Flow Problem