杂题选录

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 }
View Code

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 }
View Code

 

以上是关于杂题选录的主要内容,如果未能解决你的问题,请参考以下文章

杂题训练之三

Extract是啥意思啊

杂题训练之十

[题解]noip杂题题解

杂题训练之二

5.30杂题选讲