1001 BPM136 母函数然后分子分母分开算,分子二项式展开,分母就是一个组合数
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cmath> 6 #include<cstring> 7 #include<iomanip> 8 #include<bitset> 9 #include<queue> 10 #include<ctime> 11 #include<set> 12 #include<map> 13 #include<vector> 14 #include<cassert> 15 #include<functional> 16 #define pb push_back 17 #define popb pop_back 18 #define MID ((l+r)>>1) 19 #define LSON (k<<1) 20 #define RSON (k<<1|1) 21 #define get(a,i) ((a)&(1<<(i-1))) 22 #define PAU putchar(32) 23 #define ENT putchar(10) 24 #define clr(a,b) memset(a,b,sizeof(a)) 25 #define rep(_i,_a,_b) for(int _i=(_a);_i<=(_b);_i++) 26 #define down(_i,_a,_b) for(int _i=(_a);_i>=(_b);_i--) 27 #define FOR(_i,_b) for(int _i=1;_i<=(_b);_i++) 28 #define efo(_i,_a) for(int _i=last[(_a)];_i!=0;_i=e[_i].next) 29 #define Remax(a,b) if(b>a) a=b; 30 #define Remin(a,b) if(b<a) a=b; 31 #define SZ(x) ((int)(x).size()) 32 #define filein(x) freopen(#x".in","r",stdin) 33 #define fileout(x) freopen(#x".out","w",stdout) 34 #define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout); 35 #define mkd(x) freopen(#x".in","w",stdout); 36 #define setlargestack(x) int _SIZE=x<<20;char *_PPP=(char*)malloc(_SIZE)+_SIZE;__asm__("movl %0, %%esp " :: "r"(_PPP)); 37 #define END system("pause") 38 #define read2(a,b) read(a),read(b) 39 #define read3(a,b,c) read(a),read(b),read(c) 40 #define readg(_x1,_y1,_x2,_y2) read(_x1),read(_y1),read(_x2),read(_y2) 41 using namespace std; 42 43 typedef long long ll; 44 typedef double DB; 45 typedef long double LD; 46 typedef unsigned int UI; 47 typedef unsigned long long ULL; 48 typedef vector<int> VI; 49 typedef set<int> SI; 50 typedef set<int , greater<int> > SIG; 51 typedef map<int, int > MII; 52 typedef map<int, int, greater<int> > MIIG; 53 54 namespace fastIO{ 55 #define BUF_SIZE 100000 56 #define OUT_SIZE 100000 57 //fread->read 58 bool IOerror=0; 59 inline char nc(){ 60 static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE; 61 if (p1==pend){ 62 p1=buf; pend=buf+fread(buf,1,BUF_SIZE,stdin); 63 if (pend==p1){IOerror=1;return -1;} 64 //{printf("IO error! ");system("pause");for (;;);exit(0);} 65 } 66 return *p1++; 67 } 68 inline bool blank(char ch){return ch==32||ch==10||ch==13||ch==9;} 69 inline bool enter(char ch){return ch==10||ch==13;} 70 inline void read(int &x){ 71 bool sign=0; char ch=nc(); x=0; 72 for (;blank(ch);ch=nc()); 73 if (IOerror)return; 74 if (ch==45)sign=1,ch=nc(); 75 for (;ch>=48&&ch<=57;ch=nc())x=x*10+ch-48; 76 if (sign)x=-x; 77 } 78 inline void read(ll &x){ 79 bool sign=0; char ch=nc(); x=0; 80 for (;blank(ch);ch=nc()); 81 if (IOerror)return; 82 if (ch==45)sign=1,ch=nc(); 83 for (;ch>=48&&ch<=57;ch=nc())x=x*10+ch-48; 84 if (sign)x=-x; 85 } 86 inline void read(double &x){ 87 bool sign=0; char ch=nc(); x=0; 88 for (;blank(ch);ch=nc()); 89 if (IOerror)return; 90 if (ch==45)sign=1,ch=nc(); 91 for (;ch>=48&&ch<=57;ch=nc())x=x*10+ch-48; 92 if (ch==46){ 93 double tmp=1; ch=nc(); 94 for (;ch>=48&&ch<=57;ch=nc())tmp/=10.0,x+=tmp*(ch-48); 95 } 96 if (sign)x=-x; 97 } 98 inline void read(char *s){ 99 char ch=nc(); 100 for (;blank(ch);ch=nc()); 101 if (IOerror)return; 102 for (;!blank(ch)&&!IOerror;ch=nc())*s++=ch; 103 *s=0; 104 } 105 inline void read(char *s,bool f) { 106 char ch=nc(); 107 for (;blank(ch);ch=nc()); 108 if(IOerror)return; 109 for(;!enter(ch)&&!IOerror;ch=nc())*s++=ch; 110 *s=0; 111 } 112 inline void read(char &c){ 113 for (c=nc();blank(c);c=nc()); 114 if (IOerror){c=-1;return;} 115 } 116 #undef OUT_SIZE 117 #undef BUF_SIZE 118 }; using namespace fastIO; 119 120 const int N = 200005; 121 const ll MOD = 998244353; 122 ll inv[N]; 123 ll fac[N]; 124 ll fac_inv[N]; 125 126 ll C(int n,int m){ 127 return fac[n]*fac_inv[m]%MOD*fac_inv[n-m]%MOD; 128 } 129 130 131 void init(){ 132 inv[0]=fac[0]=inv[1]=fac_inv[0]=1; 133 rep(i,1,N-1) fac[i]=fac[i-1]*i%MOD; 134 rep(i,2,N-1) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD; 135 rep(i,1,N-1) fac_inv[i]=fac_inv[i-1]*inv[i]%MOD; 136 } 137 138 int main() { 139 init(); 140 int T; 141 read(T); 142 while(T--) { 143 ll n,m,k; 144 read3(n,m,k); 145 ll ans=0; 146 rep(i,0,m) if(m-1<=k-n*i+m-1){ 147 ll tmp=C(m,i)*C(k-n*i+m-1,m-1)%MOD; 148 if(i&1) tmp=-tmp; 149 ans+=tmp; 150 ans%=MOD; 151 } 152 cout<<(ans+MOD)%MOD<<endl; 153 } 154 return 0; 155 }
1004 小甜甜
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cmath> 5 #include <vector> 6 #include <queue> 7 #include <set> 8 #include <map> 9 #include <string> 10 #include <string.h> 11 #include <stdlib.h> 12 #include <time.h> 13 #include <climits> 14 15 using namespace std; 16 17 char ans[207][207]; 18 19 int main(){ 20 int T; 21 scanf("%d",&T); 22 while (T--) { 23 int n,m; 24 scanf("%d%d",&n,&m); 25 if ((n&1) && (m&1)){ 26 for (int i=0;i<n;i++,puts("")) 27 for (int j=0;j<m;j++) putchar('('); 28 } 29 else if (n&1) { 30 for (int i=0;i<n;i++,puts("")) 31 for (int j=0;j<m;j++) 32 if (j&1) putchar(')'); 33 else putchar('('); 34 } 35 else if (m&1) { 36 for (int i=0;i<n;i++,puts("")) 37 for (int j=0;j<m;j++) 38 if (i&1) putchar(')'); 39 else putchar('('); 40 } 41 else if ((max(n,m)+min(n,m)/2-1)<=m+n-4){ 42 for (int i=0;i<m;i++) putchar('('); puts(""); 43 for (int i=1;i<n-1;i++) { 44 putchar('('); 45 for (int j=1;j<m-1;j++) 46 if ((i+j)&1) putchar('('); 47 else putchar(')'); 48 puts(")"); 49 } 50 for (int i=0;i<m;i++) putchar(')'); puts(""); 51 } 52 else { 53 int N=min(n,m); 54 int M=max(n,m); 55 56 for (int i=0;i<M;i++) ans[0][i]='('; 57 for (int i=1;i<N-1;i++) { 58 for (int j=0;j<M/2;j++) 59 if (i&1) ans[i][j]='('; 60 else ans[i][j]=')'; 61 for (int j=M/2;j<M;j++) 62 if (i&1) ans[i][j]=')'; 63 else ans[i][j]='('; 64 } 65 for (int i=0;i<M;i++) ans[N-1][i]=')'; 66 67 if (n==N) { 68 for (int i=0;i<n;i++,puts("")) 69 for (int j=0;j<m;j++) putchar(ans[i][j]); 70 } 71 else { 72 for (int i=0;i<M;i++,puts("")) 73 for (int j=0;j<N;j++) putchar(ans[j][i]); 74 } 75 } 76 } 77 return 0; 78 }
1005 小甜甜
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cmath> 5 #include <vector> 6 #include <queue> 7 #include <set> 8 #include <map> 9 #include <string> 10 #include <string.h> 11 #include <stdlib.h> 12 #include <time.h> 13 #include <climits> 14 15 using namespace std; 16 17 char rem[5][5]; 18 char s[1000]; 19 20 void work(int k,char c){ 21 int x,y; 22 if (k==1) x=y=1; 23 if (k==2) x=1,y=2; 24 if (k==3) x=2,y=1; 25 if (k==4) x=2,y=2; 26 27 if (c=='C') { 28 char tmp=rem[x][y]; 29 rem[x][y]=rem[x+1][y]; 30 rem[x+1][y]=rem[x+1][y+1]; 31 rem[x+1][y+1]=rem[x][y+1]; 32 rem[x][y+1]=tmp; 33 } 34 else { 35 char tmp=rem[x][y]; 36 rem[x][y]=rem[x][y+1]; 37 rem[x][y+1]=rem[x+1][y+1]; 38 rem[x+1][y+1]=rem[x+1][y]; 39 rem[x+1][y]=tmp; 40 } 41 } 42 43 int main(){ 44 int T; 45 scanf("%d",&T); 46 while (T--) { 47 int n; 48 scanf("%d",&n); 49 for (int i=1;i<=3;i++) scanf("%s",rem[i]+1); 50 51 while (n--) { 52 scanf("%s",s); 53 int k=s[0]-'0'; 54 work(k,s[1]); 55 } 56 57 for (int i=1;i<=3;i++) printf("%s ",rem[i]+1); 58 } 59 return 0; 60 }
1010 小甜甜 (我的锅看错题了,本来贪心就好了被我变成了背包合并)
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cmath> 5 #include <vector> 6 #include <queue> 7 #include <set> 8 #include <map> 9 #include <string> 10 #include <string.h> 11 #include <stdlib.h> 12 #include <time.h> 13 #include <climits> 14 15 using namespace std; 16 17 const int maxN=1e5+7; 18 19 typedef pair <int,int> pii; 20 21 struct query{ 22 pii p; 23 int id; 24 25 bool operator < (const query&t) const { 26 return p<t.p; 27 } 28 }q[maxN]; 29 30 int h[maxN]; 31 int last[maxN],cnt[maxN],ans[maxN]; 32 33 int sta[maxN],top; 34 35 void work(){ 36 int n,m; 37 scanf("%d%d",&n,&m); 38 for (int i=1;i<=n;i++) scanf("%d",h+i); 39 for (int i=1;i<=m;i++) scanf("%d%d",&q[i].p.first,&q[i].p.second),q[i].id=i; 40 sort(q+1,q+m+1); 41 42 last[0]=0; 43 for (int i=1;i<=n;i++) { 44 if (h[i]>last[i-1]) { 45 last[i]=h[i]; 46 cnt[i]=cnt[i-1]+1; 47 } 48 else { 49 last[i]=last[i-1]; 50 cnt[i]=cnt[i-1]; 51 } 52 } 53 54 sta[0]=1e9+7; 55 56 int j=m; 57 top=0; 58 for (int i=n;i>0;i--) { 59 while (j && q[j].p.first==i) { 60 int mx=last[i-1]; 61 ans[q[j].id]=cnt[i-1]; 62 if (q[j].p.second>mx) { 63 ans[q[j].id]++; 64 mx=q[j].p.second; 65 } 66 67 int L=0,R=top,mid; 68 while (L<=R) { 69 mid=(L+R)>>1; 70 if (sta[mid]<=mx) R=mid-1; 71 else L=mid+1; 72 } 73 74 ans[q[j].id]+=R; 75 76 j--; 77 } 78 79 while (top>0 && h[i]>=sta[top]) top--; 80 sta[++top]=h[i]; 81 } 82 83 for (int i=1;i<=m;i++) printf("%d ",ans[i]); 84 } 85 86 int main(){ 87 int T; 88 scanf("%d",&T); 89 while (T--) work(); 90 return 0; 91 }
1012 小甜甜 (小甜甜持续超神中)
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cmath> 5 #include <vector> 6 #include <queue> 7 #include <set> 8 #include <map> 9 #include <string> 10 #include <string.h> 11 #include <stdlib.h> 12 #include <time.h> 13 #include <climits> 14 15 using namespace std; 16 17 const int maxN=5e4+7; 18 19 long long c[maxN],d[maxN],m[maxN],p[maxN]; 20 long long e[maxN],R[maxN],E[maxN]; 21 22 map <long long,long long> rem; 23 map <long long,long long>:: iterator it,it2; 24 25 void work() { 26 int n; 27 scanf("%d",&n); 28 29 long long ans=0,sum=0; 30 31 for (int i=1;i<=n;i++) scanf("%lld%lld%lld%lld",c+i,d+i,m+i,p+i); 32 for (int i=1;i<n;i++) scanf("%lld%lld%lld",e+i,R+i,E+i),sum+=E[i]; 33 34 rem.clear(); 35 36 long long cost=1e9+7; 37 long long cap=0; 38 for (int i=1;i<=n;i++){ 39 cost=min(cost,c[i]); 40 rem[cost+m[i]+sum]+=p[i]; 41 cap+=p[i]; 42 43 while (!rem.empty() && d[i]) { 44 it=rem.begin(); 45 long long k=min(it->second,d[i]); 46 ans+=k*(it->first-sum); 47 d[i]-=k; 48 cap-=k; 49 it->second-=k; 50 if (it->second==0) rem.erase(it); 51 } 52 53 if (d[i]>0) { 54 puts("-1"); 55 return; 56 } 57 58 if (i==n) break; 59 60 while (!rem.empty() && cap>e[i]) { 61 it=--rem.end(); 62 long long k=min(cap-e[i],it->second); 63 cap-=k; 64 it->second-=k; 65 if (it->second==0) rem.erase(it); 66 } 67 68 cost+=R[i]; 69 sum-=E[i]; 70 } 71 72 printf("%lld ",ans); 73 } 74 75 int main(){ 76 int T; 77 scanf("%d",&T); 78 while (T--) work(); 79 return 0; 80 }