杂题选录
Posted nopartyfoucaodong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杂题选录相关的知识,希望对你有一定的参考价值。
LuoguP3948数据结构 10-20
是比较裸的差分题目,但是要注意在线查询的时候开始傻了,每次都暴力地从1到n搞一遍,还存在数组中每次都要清空...结果T了很多点。
其实在线查询的时候直接用变量+扫到r就行了。
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 5 using namespace std; 6 typedef long long ll; 7 8 int n,opt,tot,fin; 9 char doit[5]; 10 ll sjt,minn,maxx; 11 ll cha[100000],sta[100000],sum[100000]; 12 13 int main() 14 { 15 scanf("%d%d",&n,&opt); 16 scanf("%lld%lld%lld",&sjt,&minn,&maxx); 17 for(int i=1;i<=opt;i++) 18 { 19 int l=0,r=0;ll x=0; 20 scanf("%s",doit+1); 21 if(doit[1]==‘A‘) 22 { 23 scanf("%d%d%lld",&l,&r,&x); 24 cha[l]+=x,cha[r+1]-=x; 25 } 26 else 27 { 28 scanf("%d%d",&l,&r); 29 ll noww=0,cnt=0; 30 for(int i=1;i<=r;i++) 31 { 32 noww+=cha[i]; 33 ll cmp=noww*i%sjt; 34 if(i>=l&&cmp>=minn&&cmp<=maxx) cnt++; 35 } 36 printf("%lld ",cnt); 37 } 38 } 39 for(int i=1;i<=n;i++) sta[i]=sta[i-1]+cha[i]; 40 for(int i=1;i<=n;i++) 41 { 42 sum[i]=sum[i-1]; 43 ll cmp=sta[i]*i%sjt; 44 if(cmp>=minn&&cmp<=maxx) sum[i]++; 45 } 46 scanf("%d",&fin); 47 for(int i=1;i<=fin;i++) 48 { 49 int l=0,r=0; 50 scanf("%d%d",&l,&r); 51 printf("%lld ",sum[r]-sum[l-1]); 52 } 53 return 0; 54 }
sjtu1329 聚餐 10-20
二进制枚举裸题。从数据范围中就可以看出,结果卡了半个小时多...因为单词拼错了....sigh拼成sign...我真傻,真的。
另外注意因为二进制数位从0开始记起,所以要对于菜肴号要减1.
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 5 using namespace std; 6 7 int T,n,m,fake,ans; 8 char sss; 9 int request[100][100],num[100]; 10 11 inline int read(){ 12 char ch=getchar();int x=0,f=1; 13 while(ch<‘0‘ || ch>‘9‘) { 14 if(ch==‘-‘) f=-1; 15 ch=getchar(); 16 } 17 while(ch<=‘9‘ && ch>=‘0‘) { 18 x=x*10+ch-‘0‘; 19 ch=getchar(); 20 } 21 sss=ch; 22 return x*f; 23 } 24 25 int main() 26 { 27 scanf("%d",&T); 28 while(T--) 29 { 30 scanf("%d%d",&n,&m); 31 for(int i=1;i<=m;i++) 32 for(int j=1;j<=n;j++) 33 { 34 num[i]++; 35 request[i][j]=read(); 36 if(sss!=‘ ‘) break; 37 } 38 fake=(1<<n)-1; 39 for(int i=0;i<=fake;i++) 40 { 41 int cnt=0; 42 for(int j=1;j<=m;j++) 43 for(int k=1;k<=num[j];k++) 44 { 45 if(request[j][k]<0) 46 { 47 int tmp=-request[j][k]-1; 48 if(!((i>>tmp)&1)) {cnt++;break;} 49 } 50 else 51 { 52 int tmp=request[j][k]-1; 53 if((i>>tmp)&1) {cnt++;break;} 54 } 55 } 56 ans=max(ans,cnt); 57 } 58 if(ans==m) printf("Bingo! "); 59 else printf("Sigh... "); 60 ans=0; 61 memset(num,0,sizeof(num)); 62 } 63 return 0; 64 }
以上是关于杂题选录的主要内容,如果未能解决你的问题,请参考以下文章