NOIP 模拟题
By liu_runda
题目名称 数 论 题
源程序文件名 number.cpp theory.cpp problem.cpp
输入文件名 number.in theory.in problem.in
输出文件名 number.out theory.out problem.out
每个测试点时限 1s 1s 1s
内存限制 512MB 512MB 512MB
测试点数目 10 10 20
每个测试点分值 10 10 5
是否打开O2 优化 否 否 否
数(number)
【题目描述】
给出n 个正整数,分别判断每个正整数是不是质数.
【输入格式】
第一行一个整数n 表示正整数的数目. 接下来n 行,第i+1 行一个整数ai.
【输出格式】
n 行,对于第i 行,如果ai 是质数,输出一行”YES”(不含引号),否则输出一行”NO”(不含引号).
【样例输入】
5
1
2
3
4
5
【样例输出】
NO
YES
YES
NO
YES
【数据范围】
对于10%的数据,n=1
对于50%的数据,1<=ai<=10^5
对于100%的数据,1<=n<=100,1<=ai<=10^9
论(theory)
【题目描述】
给出一个正整数n,求gcd(1,n)+gcd(2,n)+gcd(3,n)+...+gcd(n,n),即1 到n 每个数和n 的最大
公约数之和.
gcd(a,b)表示a 和b 的最大公约数,即一个最大的整数x 使得x 既是a 的约数.也是b 的约
数.
【输入格式】
一行一个整数n
【输出格式】
一行一个整数ans,表示答案
【样例输入】
11
【样例输出】
21
【数据范围】
对于30%的数据,n<=100
对于60%的数据,n<=1000000
对于80%的数据,n<=10000000
对于100%的数据,n<=100000000
题(problem)
【题目描述】
你在平面直角坐标系上.
你一开始位于(0,0).
每次可以在上/下/左/右四个方向中选一个走一步.
即:从(x,y)走到(x,y+1),(x,y-1),(x-1,y),(x+1,y)四个位置中的其中一个.
允许你走的步数已经确定为n.现在你想走n 步之后回到(0,0).但这太简单了.你希望知道
有多少种不同的方案能够使你在n 步之后回到(0,0).当且仅当两种方案至少有一步走的方向
不同,这两种方案被认为是不同的.
答案可能很大所以只需要输出答案对10^9+7 取模后的结果.(10^9+7=1000000007,1 和7
之间有8 个0)
这还是太简单了,所以你给能够到达的格点加上了一些限制.一共有三种限制,加上没有
限制的情况,一共有四种情况,用0,1,2,3 标号:
0.没有任何限制,可以到达坐标系上所有的点,即能到达的点集为{(x,y)|x,y 为整数}
1.只允许到达x 轴非负半轴上的点.即能到达的点集为{(x,y)|x 为非负数,y=0}
2.只允许到达坐标轴上的点.即能到达的点集为{(x,y)|x=0 或y=0}
3.只允许到达x 轴非负半轴上的点,y 轴非负半轴上的点以及第1 象限的点.即能到达的点
集为{(x,y)|x>=0,y>=0}
【输入格式】
一行两个整数(空格隔开)n 和typ,分别表示你必须恰好走的步数和限制的种类.typ 的含
义见【题目描述】.
【输出格式】
一行一个整数ans,表示不同的方案数对10^9+7 取模后的结果.
【样例输入0】
100 0
【样例输出0】
383726909
【样例输入1】
100 1
【样例输出1】
265470434
【样例输入2】
100 2
【样例输出2】
376611634
【样例输入3】
100 3
【样例输出3】
627595255
【数据范围】
10%的数据,typ=0,n<=100
10%的数据,typ=0,n<=1000
5%的数据, typ=0,n<=100000
10%的数据,typ=1,n<=100
10%的数据,typ=1,n<=1000
5%的数据, typ=1,n<=100000
10%的数据,typ=2,n<=100
15%的数据,typ=2,n<=1000
10%的数据,typ=3,n<=100
10%的数据,typ=3,n<=1000
5%的数据, typ=3,n<=100000
以上11 部分数据没有交集.
100%的数据,保证n 为偶数,2<=n<=100000,0<=typ<=3.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a)) 7 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a)) 8 #define Ii inline int 9 #define Iv inline void 10 #define Il inline long long 11 #define Ib inline bool 12 #define re register 13 #define ll long long 14 #define D_e_Line printf(" ------------- ") 15 #define D_e(x) printf(" ______%d_______ ",x) 16 #define Pause system("pause") 17 using namespace std; 18 Ii read(){ 19 int s=0,f=1;char c; 20 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1; 21 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar(); 22 return s*f; 23 } 24 Iv print(int x){ 25 if(x<0)putchar('-'),x=-x; 26 if(x>9)print(x/10); 27 putchar(x%10^'0'); 28 } 29 const int mod=1000000007; 30 ll cat[100005]; 31 Il Pow(ll a,ll b){ 32 ll s=1; 33 a%=mod,b%=mod; 34 while(b){ 35 if(b&1)s=s*a%mod; 36 a=a*a%mod,b>>=1; 37 } 38 //D_e(s%mod); 39 return s%mod; 40 } 41 Il Smul(ll a,ll b){ 42 ll s=0; 43 a%=mod,b%=mod; 44 while(b){ 45 if(b&1)s=(s+a)%mod; 46 a=(a+a)%mod,b>>=1; 47 } 48 return s%mod; 49 } 50 Iv Catalan(int &x){ 51 x>>=1, 52 cat[0]=1,cat[1]=1; 53 R(i,2,x){ 54 cat[i]=Smul(Smul(cat[i-1],4*i-2)%mod,Pow(i+1,mod-2))%mod; 55 //D_e(cat[i]) 56 //cout<<cat[i]<<endl; 57 } 58 } 59 Iv Work(int &n){ 60 if(n==0){putchar('0');return;} 61 Catalan(n); 62 //printf("%d ",(cat[n+1]%mod+mod)%mod-(cat[n]%mod+mod)%mod); 63 printf("%d",(cat[n]%mod+mod)%mod); 64 } 65 int anss[]={1,2,10,70,588,5544,56628,613470,6952660,81662152}; 66 #define ON_JUDGE 67 int main(){ 68 #ifdef ON_JUDGE 69 freopen("problem.in","r",stdin),freopen("problem.out","w",stdout); 70 #endif 71 int n=read(); 72 int opt=read(); 73 if(opt==2){ 74 if(n==0){ 75 printf("0");return 0; 76 } 77 printf("%d ",anss[n-1]);return 0; 78 } 79 Work(n); 80 return 0; 81 } 82 /* 83 1 84 1 85 2 86 5 87 14 88 42 89 132 90 429 91 1430 92 4862 93 16796 94 58786 95 208012 96 742900 97 2674440 98 9694845 99 35357670 100 129644790 101 477638700 102 103 104 1 105 2 106 10 107 70 108 588 109 5544 110 56628 111 613470 112 6952660 113 81662152 114 115 116 */
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a)) 7 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a)) 8 #define Ii inline int 9 #define Iv inline void 10 #define Il inline long long 11 #define Ib inline bool 12 #define re register 13 #define ll long long 14 #define D_e_Line printf(" ------------- "); 15 #define D_e(x) printf(" ______%d_______ ",x) 16 #define Pause system("pause") 17 using namespace std; 18 Ii read(){ 19 int s=0,f=1;char c; 20 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1; 21 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar(); 22 return s*f; 23 } 24 Ii gcd(int a,int b){ 25 while(b^=a^=b^=a%=b);return a; 26 } 27 Iv print(ll x){ 28 if(x<0)putchar('-'),x=-x; 29 if(x>9)print(x/10); 30 putchar(x%10^'0'); 31 } 32 #define ON_JUDGE 33 int main(){ 34 #ifdef ON_JUDGE 35 freopen("theory.in","r",stdin),freopen("theory.out","w",stdout); 36 #endif 37 //cout<<sizeof(ans)/4<<endl; 38 int n=read(); 39 ll ans=0; 40 R(i,1,n) 41 ans+=gcd(i,n); 42 print(ans); 43 return 0; 44 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a)) 7 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a)) 8 #define Ii inline int 9 #define Iv inline void 10 #define Il inline long long 11 #define Ib inline bool 12 #define re register 13 #define ll long long 14 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b)) 15 #define D_e_Line printf(" ------------- "); 16 #define D_e(x) printf(" ______%d_______ ",x) 17 #define Pause system("pause") 18 using namespace std; 19 Ii read(){ 20 int s=0,f=1;char c; 21 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1; 22 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar(); 23 return s*f; 24 } 25 Iv print(ll x){ 26 if(x<0)putchar('-'),x=-x; 27 if(x>9)print(x/10); 28 putchar(x%10^'0'); 29 } 30 Ii Phi(int x){ 31 int sum=x; 32 for(re int i=2;i*i<=x;++i) 33 if(x%i==0){ 34 sum-=sum/i; 35 while(x%i==0)x/=i; 36 } 37 return x!=1?sum-sum/x:sum; 38 } 39 Il Cal(int d,int n){ 40 return (ll)Phi(n/d)*d; 41 } 42 int main(){ 43 freopen("theory.in","r",stdin),freopen("theory.out","w",stdout); 44 int n=read(); 45 ll ans=0; 46 for(re int i=1;i*i<=n;++i) 47 if(n%i==0){ 48 ans+=Cal(i,n); 49 if(i*i<n) 50 ans+=Cal(n/i,n); 51 } 52 print(ans); 53 return 0; 54 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a)) 7 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a)) 8 #define Ii inline int 9 #define Iv inline void 10 #define Il inline long long 11 #define Ib inline bool 12 #define re register 13 #define ll long long 14 #define Cmax(a,b) ((a)=(a)>(b)?(a):(b)) 15 #define D_e_Line printf(" ------------- "); 16 #define D_e(x) printf(" ______%d_______ ",x) 17 #define Pause system("pause") 18 using namespace std; 19 const int N=200005; 20 const int mod=1000000007; 21 Il read(){ 22 ll s=0,f=1;char c; 23 for(c=getchar();c>'9'||c<'0';c=getchar())if(c=='-')f=-1; 24 while(c>='0'&&c<='9')s=s*10+(c^'0'),c=getchar(); 25 return s*f; 26 } 27 Iv print(ll x){ 28 if(x<0)putchar('-'),x=-x; 29 if(x>9)print(x/10); 30 putchar(x%10^'0'); 31 } 32 int fac[N],invfac[N]; 33 Ii C(int n,int m){ 34 if(n<m)return 0; 35 return (ll)fac[n]*invfac[m]%mod*invfac[n-m]%mod; 36 } 37 Ii Pow(int a,int b){ 38 int s=1; 39 a%=mod,b%=mod; 40 while(b){ 41 if(b&1)s=(ll)s*a%mod; 42 a=(ll)a*a%mod,b>>=1; 43 } 44 return s%mod; 45 } 46 Ii Catalan(int n){ 47 return (ll)C(n<<1,n)*Pow(n+1,mod-2)%mod; 48 } 49 Iv Init(){ 50 fac[0]=1; 51 R(i,1,N) 52 fac[i]=(ll)(fac[i-1])*i%mod; 53 invfac[N-1]=Pow(fac[N-1],mod-2); 54 nR(i,N-1,1) 55 invfac[i-1]=(ll)(invfac[i])*i%mod; 56 } 57 int f[N]; 58 int main(){ 59 //freopen("problem.in","r",stdin),freopen("problem.out","w",stdout); 60 Init(); 61 int n=read(); 62 switch(read()){ 63 case 0:{ 64 ll ans=0; 65 for(re int i=0;i<=n;i+=2) 66 ans=(ll)((ans+C(n,i))*C(i,i>>1)%mod*C((n-i),(n-i)>>1)%mod)%mod; 67 //ans=(C(n,n>>1)%mod)*(C(n,n>>1)%mod)%mod; 68 print(ans);break; 69 } 70 case 1:{ 71 printf("%d ",Catalan(n>>1));break; 72 } 73 case 2:{ 74 n>>=1, 75 f[0]=1,f[1]=4; 76 R(i,2,n) 77 R(j,1,i) 78 f[i]=((ll)(f[i]+f[i-j]*4)*Catalan(j-1)%mod)%mod; 79 print(f[n]);break; 80 } 81 default:{ 82 int ans=0; 83 for(re int i=0;i<=n;i+=2) 84 ans=(ans+(ll)(C(n,i))*Catalan(i>>1)%mod*Catalan((n-i)>>1)%mod)%mod; 85 print(ans);break; 86 } 87 } 88 return 0; 89 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <cmath> 6 #include <queue> 7 #include <bitset> 8 9 #define Min(a,b) ((a)<(b)?(a):(b)) 10 #define Max(a,b) ((a)>(b)?(a):(b)) 11 #define Mabs(a,b) ((a)>(b)?(a)-(b):(b)-(a)) 12 #define Abs(a) (a)>0?(a):(-(a)) 13 template <typename QvQ> inline QvQ Min2(QvQ a,QvQ b){if(a<b) return a;return b;} 14 template <typename QvQ> inline QvQ Max2(QvQ a,QvQ b){if(a>b) return a;return b;} 15 template <typename QvQ> inline QvQ Abs2(QvQ a){if(a>0) return a;return -a;} 16 17 #define inf 0x7f7f7f7f 18 #define dinf 0x3f3f3f3f 19 #define llinf 0x7f7f7f7f7f7f7f7f 20 #define lldinf 0x3f3f3f3f3f3f3f3f 21 22 #define ll long long 23 #define rei register int 24 #define inv inline void 25 #define inb inline bool 26 #define ini inline int 27 28 #define bl putchar(' ') 29 #define ed putchar(' ') 30 #define test std::cout<<"this:" 31 #define card system("pause") 32 33 #define read2(a,b) read(a),read(b) 34 #define read3(a,b,c) read(a),read(b),read(c) 35 36 #define MAXN 100005 37 #define MAXM 100005 38 39 char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf; 40 #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 41 42 template <typename QvQ>inv read(QvQ &x) 43 { 44 x=0;int f=1; 45 char c=getchar(); 46 for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1; 47 for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48); 48 x=x*f; 49 } 50 template <typename QvQ>inv write(QvQ x) 51 { 52 if(x<0) x=-x,putchar('-'); 53 if(x>9) write(x/10); 54 putchar(x%10+'0'); 55 } 56 int n,q,cnt,len; 57 ll val,ans,a[MAXN],sum[MAXN/100],lazy[MAXN/100]; 58 int piece[MAXN],left[MAXN/100],right[MAXN/100]; 59 inv build() 60 { 61 memset(lazy,0,sizeof(lazy)); 62 read2(n,q); 63 len=sqrt(n); 64 cnt=n/len; 65 if(n%len) ++cnt; 66 for(rei i=1;i<=n;++i) read(*(a+i)),*(piece+i)=(i-1)/len+1,sum[*(piece+i)]+=*(a+i); 67 for(rei i=1;i<=cnt;++i) *(left+i)=(i-1)*len+1,*(right+i)=i*len; 68 69 } 70 int main() 71 { 72 build(); 73 int willing; 74 while(q--) 75 { 76 int l,r; 77 read3(willing,l,r); 78 if(willing==1) 79 { 80 int val;read(val); 81 for(rei i=l;i<=Min(r,*(right+*(piece+l)));++i) a[i]+=val,sum[piece[i]]+=val; 82 for(rei i=r;i>=Max(l,*(left+*(piece+r)));--i) a[i]+=val,sum[piece[i]]+=val; 83 for(rei i=piece[l]+1;i<=piece[r]-1;++i) lazy[i]+=val; 84 } 85 else 86 { 87 ans=0; 88 for(rei i=l;i<=Min(r,*(right+*(piece+l)));++i) ans+=a[i]+lazy[piece[i]]; 89 for(rei i=r;i>=Max(l,*(left+*(piece+r)));--i) ans+=a[i]+lazy[piece[i]]; 90 for(rei i=piece[l]+1;i<=piece[r]-1;++i) ans+=sum[i]+lazy[i]*(right[i]-left[i]+1); 91 if(piece[l]==piece[r]) ans-=a[l]+lazy[piece[l]]+lazy[piece[r]]+a[r]; 92 write(ans),ed; 93 } 94 } 95 return 0; 96 }