隐藏页面特效

2016-11-16试题解题报告

2016-11-16试题解题报告

By shenben 

 

11-15NOIP欢乐赛

 

题目名称

分火腿

无聊的会议

班服

时间限制

1s

1s

1s

内存限制

64MB

128MB

128MB

输入文件

hdogs.in

meeting.in

shirt.in

输出文件

hdogs.out

meeting.out

shirt.out

测试点个数

10

10

10

 

 

 

测评环境:windows系统

水题,众神轻虐

 

 

 

 

 

 

分火腿

hdogs.pas/.c/.cpp

时间限制:1s;内存限制 64MB

题目描述:

小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿。为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份。请问最少要切几刀?

输入描述:

第一行一个整数T,表示有T组数据。

接下来T组数据,每组共一行,有两个数字nm

输出描述:

每组数据一行,输出最少要切的刀数。

样例输入:

2

2 6

6 2

样例输出:

4

0

数据范围:

100%的数据保证T<=1000n,m<=2147483647

 

 

 

 

 

 

 

 

 

 

 

无聊的会议

meeting.pas/.c/.cpp

时间限制:1s;内存限制 128MB

题目描述:

土豪学长作为一名光荣的学生会干部,每天要参加很多无聊的会议。他发现:他开会的会议桌一定是正n边形,n个干部坐在这个多边形顶点上。因为太无聊了,所以他想要数出所有的“完全”等腰三角形——这种等腰三角形的三个顶点一定全是给出n多边形的顶点,且三个顶点上坐的干部性别相同。

土豪学长是土豪,他用1000000000%10的佣金雇用你,让你帮他数。PS:如果两个“完全”等腰三角形三个顶点相同,计算时只算一个。

输入描述:

第一行一个数字T,表示有T组数据。

接下来有T组数据,每组数据共一行。这一行给出一个长度为n的字符串,表示正n边形n个顶点上干部的性别。1为男,0为女。

输出描述:

对于第i组数据:输出”Case i: ans”(不带引号)ans为“完全”等腰三角形的数量。

样例输入:

5

0001

01

10001

1101010

111010

样例输出:

Case 1: 1

Case 2: 0

Case 3: 1

Case 4: 3

Case 5: 2

数据范围:

40%的数据保证n<=20

100%的数据保证 n<=10^6

所有数据保证T<=10

班服

 (shirt.pas/.c/.cpp)

时间限制:1s;内存限制 128MB

题目描述:

要开运动会了,神犇学校的n个班级要选班服,班服共有100种样式,编号1~100。现在每个班都挑出了一些样式待选,每个班最多有100个待选的样式。要求每个班最终选定一种样式作为班服,且该班的样式不能与其他班级的相同,求所有可能方案的总数,由于方案总数可能很大,所以要求输出mod 1000000007后的答案。

输入描述:

共有T组数据。

对于每组数据,第一行为一个整数n,表示有n个班级。

2~n+1行,每行有最多100个数字,表示第i-1班待选班服的编号。

输出描述:

对于每组数据,输出方案总数 mod 1000000007后的答案。

样例输入:

2

3

5 100 1

2

5 100

2

3 5

8 100

样例输出:

4

4

数据范围:

对于30%的数据,1<=T<=3, 1<=n<=3,每班待选样式不超过10种。

对于50%的数据,1<=T<=5, 1<=n<=5,每班待选样式不超过50种。

对于100%的数据,1<=T<=10, 1<=n<=10,每班待选样式不超过100种。

 

T1代码:

#include<cstdio> #include<algorithm> #include<iostream> using namespace std; int n,m,T; #define name "hdogs" int main(){ freopen(name".in","r",stdin); freopen(name".out","w",stdout); scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); printf("%d\n",m-__gcd(n,m)); } fclose(stdin); fclose(stdout); return 0; }

 

T2代码:

#include<cstdio> #include<cstring> #define ll long long #ifdef unix #define LL "%lld" #else #define LL "%I64d" #endif using namespace std; const int N=1e6+10; int T,n; char a[N]; ll calc(){ ll ans=0; ans=(ll)n*((n-1)/2); if(n%3==0) ans-=n/3*2; return ans; } ll del(){ ll ans=0; if(n&1){ int s0=0,s1=0; for(int i=0;i<n;i++){ if(a[i]=='0') s0++; else s1++; } ans=(ll)s0*s1*3; if(n%3==0){ s0=n/3*2; s1=n/3; for(int i=0;i<n;i++){ if(a[i]!=a[(i+s0)%n]) ans--; if(a[i]!=a[(i+s1)%n]) ans--; } } return ans/2; } else{ int s00=0,s01=0,s10=0,s11=0; for(int i=0;i<n;i+=2){ if(a[i]=='0') s00++; else s01++; } for(int i=1;i<n;i+=2){ if(a[i]=='0') s10++; else s11++; } ans=(ll)s00*s11*2+(ll)s01*s10*2+(ll)s00*s01*4+(ll)s10*s11*4; int n1=n/2; for(int i=0;i<n;i++){ if(a[i]!=a[(i+n1)%n]) ans--; } if(n%3==0){ int s0=n/3*2; int s1=n/3; for(int i=0;i<n;i++){ if(a[i]!=a[(i+s0)%n]) ans--; if(a[i]!=a[(i+s1)%n]) ans--; } } return ans/2; } } #define name "meeting" int main(){ freopen(name".in","r",stdin); freopen(name".out","w",stdout); scanf("%d",&T); for(int i=1;i<=T;i++){ scanf("%s",a);n=strlen(a); printf("Case %d: ",i); printf(LL"\n",calc()-del()); } fclose(stdin); fclose(stdout); return 0; } /*10分代码存档 #include<cstdio> #include<cstring> #include<algorithm> #include<set> using namespace std; struct node{ int x,y,z; node(int x=0,int y=0,int z=0):x(x),y(y),z(z){} bool operator <(const node &a)const{ if(x==a.x&&y==a.y)return z<a.z; if(x==a.x) return y<a.y; return x<a.x; } bool operator ==(const node &a)const{ return x==a.x&&y==a.y&&z==a.z; } }; set<node>ha; set<node>::iterator it; const int N=1e6+10; int cas,n,m,len; int ans,cnt,te[4]; char s[N]; #define name "meeting" int main(){ freopen(name".in","r",stdin); freopen(name".out","w",stdout); scanf("%d",&cas); for(int i=1,len;i<=cas;i++){ scanf("%s",s+1); len=strlen(s+1); ha.clear(); if(len<3){printf("Case %d: %d\n",i,0);continue;} s[++len]=s[1]; ans=0; for(int j=2;j<len;j++){ for(int L=j,R=j;L-1>=1&&R+1<=len;L--,R++){ if(s[L-1]==s[R+1]&&s[L-1]==s[j]){ te[0]=L-1;te[1]=j;te[2]=R+1==len?1:R+1; sort(te,te+3); cnt=unique(te,te+3)-te; if(cnt<3) continue; it=ha.find(node(te[0],te[1],te[2])); if(it==ha.end()){ ha.insert(node(te[0],te[1],te[2])); ans++; } } } } printf("Case %d: %d\n",i,ans); s[len]=s[len-1]=0; } return 0; }*/

 

T3代码:

#include<cstdio> #include<cstring> using namespace std; const int N=11; const int M=110; const int mod=1000000007; int T,n,ans,a[N][M]; int f[M][M*10]; bool vis[M]; /*void dfs(int dep){ if(dep>n){ ans++; if(ans>=mod) ans-=mod; return ; } for(int i=1;i<=a[dep][0];i++){ if(!vis[a[dep][i]]){ vis[a[dep][i]]=1; dfs(dep+1); vis[a[dep][i]]=0; } } }*/ void dp(){ memset(f,0,sizeof f); f[0][0]=1; for(int i=1;i<=100;i++){ for(int j=0;j<(1<<n);j++){ f[i][j]=f[i-1][j]; } for(int j=1;j<=n;j++){ if(!a[j][i]) continue; for(int k=0;k<(1<<n);k++){ if(k&(1<<j-1)) continue; f[i][k+(1<<j-1)]=(f[i][k+(1<<j-1)]+f[i-1][k])%mod; } } } printf("%d\n",f[100][(1<<n)-1]); } #define name "shirt" int main(){ freopen(name".in","r",stdin); freopen(name".out","w",stdout); scanf("%d",&T); while(T--){ //ans=0; memset(a,0,sizeof a); scanf("%d",&n);getchar(); for(int i=1,x;i<=n;i++){ do{ scanf("%d",&x); a[i][x]=1; }while(getchar()!='\n'); } dp(); //dfs(1); //printf("%d\n",ans); } return 0; }

 

 

 

 


__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6068714.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(487)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示