博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOIP2007] 普及组
阅读量:6005 次
发布时间:2019-06-20

本文共 2773 字,大约阅读时间需要 9 分钟。

模拟

开个struct排序即可 c++吼啊

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int mxn=100010;10 int read(){11 int x=0,f=1;char ch=getchar();12 while(ch<'0' || ch>'9'){ if(ch=='-')f=-1;ch=getchar();}13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}14 return x*f;15 }16 struct stu{17 int ch,ma,en;18 int tot;19 int id;20 }s[300];21 int cmp(stu a,stu b){22 if(a.tot!=b.tot)return a.tot>b.tot;23 if(a.ch!=b.ch)return a.ch>b.ch;24 return a.id
奖学金

 

贪心

价值从小到大排序。每次把最大的和最小的组合在一起(如果不能组合,那么最大的单独成为一组)

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int mxn=30010;10 int read(){11 int x=0,f=1;char ch=getchar();12 while(ch<'0' || ch>'9'){ if(ch=='-')f=-1;ch=getchar();}13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}14 return x*f;15 }16 int w,n;17 int p[mxn];18 int main(){19 w=read();n=read();20 int i,j;21 for(i=1;i<=n;i++) p[i]=read();22 sort(p+1,p+n+1);23 int hd=1,tl=n;24 int cnt=0;25 while(hd<=tl){26 if(p[hd]+p[tl]<=w)cnt++,hd++,tl--;27 else tl--,cnt++;28 }29 printf("%d\n",cnt);30 return 0;31 }
纪念品分组

 

DP

能闪则闪。不能闪的时候,同时处理原地回蓝和一直跑两个状态,如果回蓝后闪烁比跑的距离更远,就更新距离。

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int mxn=100010;10 int m,s,t;11 int main(){12 scanf("%d%d%d",&m,&s,&t);13 int i,j;14 int now=0;15 int tst=0;16 for(i=1;i<=t;i++){17 if(m>=10){18 tst+=60;19 m-=10;20 }21 else m+=4;22 if(tst>now+17)now=tst;23 else now+=17;24 if(now>=s)break;25 }26 if(i>t)printf("No\n%d\n",now);27 else printf("Yes\n%d\n",i);28 return 0;29 }
守望者的逃离

 

普通的汉诺塔方案数是f(n)=2^n-1

这里因为两个盘等价,方案数直接乘2变成2^(n+1)-2

一个高精乘单精就可以解决,之后末尾直接-2 (因为2的次方数,个位只能是2 4 6 8的一种,所以不需要借位)

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int mxn=10001;10 int len=1;11 int a[mxn];12 int main(){13 int i,j,n;14 scanf("%d",&n);15 a[1]=1;16 for(i=0;i<=n;i++){17 for(j=len;j;j--){18 a[j]*=2;19 a[j+1]+=a[j]/10;20 a[j]%=10;21 }22 if(a[len+1]) ++len;23 }24 a[1]-=2;25 for(i=len;i;i--)printf("%d",a[i]);26 printf("\n");27 return 0;28 }
hanoi双塔

 

转载于:https://www.cnblogs.com/SilverNebula/p/6016412.html

你可能感兴趣的文章
netstat命令简单使用
查看>>
Python标示符命名规则
查看>>
SSL certificate problem unable to get local issuer certificate解决办法
查看>>
node.js中使用http模块创建服务器和客户端
查看>>
11.表达式语言
查看>>
3.数据校验和SpringEL
查看>>
面向对象编程-何为对象
查看>>
android以json形式提交信息到服务器
查看>>
最短最优升级路径(完美世界2017秋招真题)
查看>>
【PHP基础】错误处理、异常处理
查看>>
Android之drawable state各个属性详解
查看>>
android开发(22)使用正则表达式 。从一个字符串中找出数字,多次匹配。
查看>>
AJAX
查看>>
2015 多校联赛 ——HDU5334(构造)
查看>>
mysql字符集
查看>>
DP_1d1d诗人小G
查看>>
非、半、结构化数据学习【转载】
查看>>
avalon加载一闪而过现象
查看>>
Python学习第二天-编写购物车
查看>>
BigTable——针对结构型数据的一种分布式存储系统
查看>>