闲来无事呆在寝室打打题,没有想到还有中奖这种操作,超开心的
Start Time:2017-06-24 12:00:00 End Time:2017-06-24 14:30:00 Refresh Time:2017-06-24 14:48:00 Private
Time Limit:1s Memory Limit:128MByte
Submissions:529Solved:76
给一个正整数nn,求下列表达式的最大值:
(sin(x)+sin(y)+sin(z))[x+y+z=n][x≥1][y≥1][z≥1](sin(x)+sin(y)+sin(z))[x+y+z=n][x≥1][y≥1][z≥1]为了降低难度,这里的x,y,zx,y,z皆为整数
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n;
double d=-3.0;
for(int i=n/3+1;i;i--) if(n-2*i>0) d=max(2*sin(i)+sin(n-2*i),d); printf("%.9f\n",d); return 0;}
Time Limit:4s Memory Limit:128MByte
Submissions:196Solved:47
众所周知zhu是一个大厨,zhu一直有自己独特的咸鱼制作技巧.
tang是一个咸鱼供应商,他告诉zhu在他那里面有NN条咸鱼(标号从1到N)可以被用来制作.
每条咸鱼都有一个咸鱼值KiKi,初始时所有KiKi都是00.
zhu是一个特别的人,他有MM个咸数(咸鱼数字), 对于每个咸数xx,他都会让所有满足标号是xx倍数的咸鱼的咸鱼值异或上11.
zhu现在想知道经过了这MM个咸数的筛选之后,最终有多少条的咸鱼的咸鱼值是11?
这个题是很经典的容斥啊,不过我以前做的是容斥是统计所有格子的,这个容斥需要统计奇数个的数字个数,两个相同的数异或为0
所以我就要对之前的容斥进行修改,比如A BC,我以前是 A+B+C-AC-AB-BC+ABC,现在我需要做的是A+B+C-2AC-2AB-2BC+4ABC,和我当前id有关,2的几次幂,然后就可以过了
#include <stdio.h> #include <bits/stdc++.h> using namespace std; long long ans,a[30]; int n,m; long long gcd(long long a,long long b){ return b==0?a:gcd(b,a%b); } void DFS(int cur,long long lcm,int id){ lcm=a[cur]/gcd(a[cur],lcm)*lcm; if(id&1) ans+=n/lcm*(1<<(id-1)); else ans-=n/lcm*(1<<(id-1)); for(int i=cur+1;i<m;i++) DFS(i,lcm,id+1); } int main(){ int t; cin>>t; while(t--){ cin>>n>>m; ans=0; for(int i=0;i<m;i++) cin>>a[i]; for(int i=0;i<m;i++) DFS(i,a[i],1); cout<<ans<<endl; } return 0;}
Time Limit:1s Memory Limit:256MByte
Submissions:156Solved:39
丶).妩钶取玳°月是月大叔的ID,他是一个智商高达429的智力大师,最擅长的技能就是搞事。今天他又要开始搞事了。
现在有n个元素aiai
然后现在有Q个询问,每次月大叔想问一共有多少对pair<i,j>,满足a[i]+a[j]>=k(其中 i<j)
#include <bits/stdc++.h> #include <stdio.h> #include <bits/stdc++.h> using namespace std; #define LL long long const double pi=acos(-1.0); struct Complex { double x,y; Complex(double _x=0.0,double _y=0.0) { x=_x; y=_y; } Complex operator -(const Complex &b)const { return Complex(x-b.x,y-b.y); } Complex operator +(const Complex &b)const { return Complex(x+b.x,y+b.y); } Complex operator *(const Complex &b)const { return Complex(x*b.x-y*b.y,x*b.y+y*b.x); } }; void change(Complex y[],int len) { int i,j,k; for(i=1,j=len/2; i<len-1; i++) { if(i<j) swap(y[i],y[j]); k=len/2; while(j>=k) { j-=k; k/=2; } if(j<k) j+=k; } } void fft(Complex y[],int len,int on) { change(y,len); for(int h=2; h<=len; h<<=1) { Complex wn(cos(-on*2*pi/h),sin(-on*2*pi/h)); for(int j=0; j<len; j+=h) { Complex w(1,0); for(int k=j; k<j+h/2; k++) { Complex u=y[k]; Complex t=w*y[k+h/2]; y[k]=u+t; y[k+h/2]=u-t; w=w*wn; } } } if(on==-1) { for(int i=0; i<len; i++) y[i].x/=len; } } const int maxn=400040; Complex x1[maxn]; int a[maxn]; LL num[maxn]; int main() { int ncase; scanf("%d",&ncase); while(ncase--) { memset(num,0,sizeof(num)); int n,k; scanf("%d%d",&n,&k); for(int i=0; i<n; i++) { scanf("%d",&a[i]); num[a[i]]++; } sort(a,a+n); int len1=a[n-1]+1; int len=1; while(len<2*len1) len<<=1; for(int i=0; i<len1; i++) x1[i]=Complex(num[i],0); for(int i=len1; i<len; i++) x1[i]=Complex(0,0); fft(x1,len,1); for(int i=0; i<len; i++) x1[i]=x1[i]*x1[i]; fft(x1,len,-1); for(int i=0; i<len; i++) num[i]=(long long)(x1[i].x+0.5); len=2*a[n-1]; for(int i=0; i<n; i++) num[a[i]+a[i]]--; for(int i=1; i<=len; i++) { num[i]/=2; num[i]+=num[i-1]; } while(k--) { int s; scanf("%d",&s); if(s>len) printf("0\n"); else printf("%lld\n",num[len]-num[s-1]); } } return 0; }