A.预防流感的拉面女神

简析:计算 n 的二进制表示里面 1 的个数

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int bitcount(int x) {
int ans = ;
while(x) {
if(x & ) ans++;
x >>= ;
}
return ans;
} int main()
{
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout); int T; scanf("%d", &T);
while(T--) {
int n; scanf("%d", &n);
printf("%d\n", bitcount(n));
} return ;
}

参考代码

B.草滩小王子与天行健

简析:这个题主要分成四种情况讨论:

一荤一素,两荤两素,一素两荤,一荤两素。

因为不管是饭和汤,还是面条,都会对应上面四种情况,所以我把饭和汤,面条写的一个函数里。

详细见代码,请各位大神指教。----wzm

 #include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int a[],b[],c[],d[],e[];
int a1,b1,c1,d1,e1;
int sum[],ans,minn,maxn;
void f(int s){//一饭一汤,面条
for(int x = ; x<=a1; x++){
for(int y = ; y<=b1; y++){
if((s+a[x]+b[y])>=minn&&(s+a[x]+b[y])<=maxn){
ans++;
}
}
}
for(int z = ; z<=c1; z++){
if((s+c[z])>=minn&&(s+c[z])<=maxn){
ans++;
}
}
}
void solve(){
int t;
scanf("%d",&t);
while(t--){
cin>>a1>>b1>>c1>>d1>>e1;
for(int i = ; i<=a1; i++) cin>>a[i];
for(int i = ; i<=b1; i++) cin>>b[i];
for(int i = ; i<=c1; i++) cin>>c[i];
for(int i = ; i<=d1; i++) cin>>d[i];
for(int i = ; i<=e1; i++) cin>>e[i];
cin>>minn>>maxn;
ans = ;
for(int i = ; i<=d1; i++){//一荤一素
for(int j = ; j<=e1; j++){
{
int s = d[i]+e[j];
f(s);
}
}
}
for(int i = ; i<=d1; i++)//两荤两素
for(int j = i+; j<=d1; j++){
for(int p = ; p<=e1; p++){
for(int q = p+; q<=e1; q++){
int s = d[i]+d[j]+e[p]+e[q];
f(s);
}
}
}
for(int i = ; i<=d1; i++){//一荤两素
for(int p = ; p<=e1; p++)
for(int q = p+; q<=e1; q++){
int s = d[i]+e[p]+e[q];
f(s);
}
}
for(int p = ; p<=e1; p++){//两荤一素
for(int i = ;i<=d1; i++){
for(int j = i+; j<=d1; j++){
int s = d[i]+d[j]+e[p];
f(s);
}
}
}
printf("%d\n",ans);
}
}
int main()
{
solve();
return ;
}

wzm

C.草滩小王子与测量误差

简析:可以先将角度转换为最小的单位的值,再按照题意模拟

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; struct Node{
int d,m,s;
int x;
}a[]; struct node{
double l;
int id;
}b[]; int cmp(node n1,node n2){
return n1.l < n2.l;
} int sum,vis[],n;
double len[]; void solve(){
int sum0 = (n-)**;
int f = sum - sum0;
if( (long long) f*f > *n){
puts("Poor Prince Cao Tan");
return;
}
f = -f;
int v = f/n;
int r = f%n;
// printf("v = %d r = %d\n",v,r);
memset(vis,,sizeof(vis));
sort(b+,b+n+,cmp);
for(int i = ;i <= n;i++){
int bl,br,jl,jr;
if(b[i].id == n){
bl = ;
br = n-;
jl = ;
jr = n;
}
else if(b[i].id == ){
bl = n;
br = ;
jl = ;
jr = ;
}
else{
bl = b[i].id -;
br = b[i].id +;
jl = b[i].id;
jr = b[i].id+;
}
if(len[bl] > len[br]){
swap(bl,br);
swap(jl,jr);
}
// printf("bl = %d br = %d jl = %d jr = %d\n",bl,br,jl,jr);
if(!vis[jl]){
a[jl].x += v;
if(abs(r)){
a[jl].x += r/abs(r);
int fuhao = r/abs(r);
if(fuhao == -) r++;
else r--;
}
vis[jl] = ;
}
if(!vis[jr]){
a[jr].x += v;
if(abs(r)){
a[jr].x += r/abs(r);
int fuhao = r/abs(r);
if(fuhao == -) r++;
else r--;
}
vis[jr] = ;
}
}
for(int i = ;i <= n;i++){
int c1 = a[i].x/;
int c2 = (a[i].x-c1*)/;
int c3 = a[i].x-c1*-c2*;
a[i].d = c1;a[i].m = c2;a[i].s = c3;
}
for(int i = ;i <= n;i++) printf("%d %d %d\n",a[i].d,a[i].m,a[i].s);
} int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
sum = ;
for(int i = ;i <= n;i++){
scanf("%d %d %d",&a[i].d,&a[i].m,&a[i].s);
a[i].x = a[i].d* + a[i].m*+a[i].s;
sum += a[i].x;
}
for(int i = ;i <= n;i++){
scanf("%lf",&b[i].l);
b[i].id = i;
len[i] = b[i].l;
}
solve();
}
return ;
}

参考代码1

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn=;
double L[maxn]; struct angle
{
int d,m,s;
}Zero,One,b[maxn],v[maxn],a[maxn]; angle Plus(angle A,angle B)
{
angle tmp=Zero;
tmp.s=A.s+B.s;
if(tmp.s>=) tmp.s-=,tmp.m++;
tmp.m+=A.m+B.m;
if(tmp.m>=) tmp.m-=,tmp.d++;
tmp.d+=A.d+B.d;
return tmp;
} angle Minus(angle A,angle B)
{
angle tmp;
tmp.s=A.s-B.s;
tmp.m=A.m-B.m;
tmp.d=A.d-B.d;
while(tmp.s<) tmp.s+=,tmp.m--;
while(tmp.m<) tmp.m+=,tmp.d--;
return tmp;
} angle Divide(angle A,int B)
{
angle tmp;
tmp.d=A.d/B;
tmp.m=A.m+A.d%B*;
tmp.s=A.s+tmp.m%B*;
tmp.m/=B;
tmp.s/=B;
return tmp;
} angle Mod(angle A,int B)
{
angle tmp;
tmp.s=(A.d*+A.m*+A.s)%B;
return tmp;
} bool Smaller(angle A,angle B)
{
if(A.d!=B.d) return A.d<B.d;
if(A.m!=B.m) return A.m<B.m;
return A.s<B.s;
} struct point
{
int id;
double x,y;
}p[maxn]; bool cmp(point A,point B)
{
if(A.x!=B.x) return A.x<B.x;
return A.y<B.y;
} int main(void)
{
int T;
scanf("%d",&T);
Zero.d=Zero.m=Zero.s=;
One.d=One.m=;One.s=;
while(T--)
{
int n,flag=;
scanf("%d",&n);
angle sum=Zero,tot=Zero,delta,q,r;
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&b[i].d,&b[i].m,&b[i].s);
sum=Plus(sum,b[i]);
}
for(int i=;i<=n;i++) scanf("%lf",L+i);
tot.d=(n-)*;
if(Smaller(sum,tot)) {flag=; delta=Minus(tot,sum);}
else delta=Minus(sum,tot);
if(delta.d*+delta.m*+delta.s>*sqrt(n)) {puts("Poor Prince Cao Tan");continue;}
q=Divide(delta,n);
r=Mod(delta,n);
for(int i=;i<=n;i++)
{
double x=L[i],y=L[i-<?n:i-];
if(x>y) swap(x,y);
p[i].id=i;
p[i].x=x;
p[i].y=y;
}
sort(p+,p++n,cmp);
memset(v,,sizeof(v));
for(int i=;i<=n;i++)
{
if(!Smaller(Zero,r)&&!Smaller(r,Zero)) break;
int pos=p[i].id;
v[pos]=Plus(v[pos],One);
r=Minus(r,One);
}
for(int i=;i<=n;i++)
{
if(flag) a[i]=Plus(Plus(b[i],v[i]),q);
else a[i]=Minus(Minus(b[i],v[i]),q);
printf("%d %d %d\n",a[i].d,a[i].m,a[i].s);
}
}
return ;
}

参考代码2

D.无奈自习的草滩小王子

简析:dp[i] 表示花费 i 时间做事情能够得到的最大效率,最后再 O(n) 扫一遍 (t-i) * (dp[i] + 1) 得到最大值

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXT=1e3+;
int dp[MAXT];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,t;
scanf("%d%d",&t,&n);
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) {
int a,b;
scanf("%d%d",&a,&b);
for(int j=t;j>=a;j--)dp[j]=max(dp[j],dp[j-a]+b);
}
int ans=;
for(int i=;i<t;i++) ans=max(ans,(t-i)*( dp[i]+) );
printf("%d\n",ans);
}
return ;
}

参考代码

E.草滩小王子之化学实验课

简析:用并查集处理每一对能够发生化学反应的药剂,反应次数,

假设一个连通块的大小为 x ,则发生化学反应的次数为 x-1 (x >= 2)将所有的连通块的反应次数加起来即可

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <bitset>
#include <cmath>
using namespace std; int s[]; int Find(int x)
{
if(s[x] == ) return x;
return s[x] = Find(s[x]);
} void SetUnion(int r1, int r2)
{
s[r2] = r1;
} int main()
{
int t, n, k;
int x, y;
int r1, r2;
int ans;
scanf("%d", &t);
while(t--)
{
ans = ;
memset(s, , sizeof(s));
scanf("%d%d", &n, &k);
for(int i = ; i <= k ; i++)
{
scanf("%d%d", &x, &y);
r1 = Find(x);
r2 = Find(y);
if(r1 != r2)
{
SetUnion(r1, r2);
}
}
for(int i = ; i <= n ; i++)
if(s[i] == ) ans++;
ans = n - ans;
printf("%d\n",ans);
}
return ;
}

参考代码

F.草滩小王子与打扫宿舍

简析:巴什博奕戳这

 #include <cstdio>

 int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); int T; scanf("%d", &T);
while(T--) {
int n, m;
scanf("%d%d", &n, &m);
if(n % (m + ) == ) printf("Bob\n");
else printf("Alex\n");
}
return ;
}

参考代码

G.草滩小王子与黄牛票

简析:倒着扫一遍,维护一个最大值max,如果当前的 a[i] > max ,更新 max 的值,

否则将 a[i] 卖掉,得到 max-a[i] 的钱

 #include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const int maxn = 1e6 + ;
LL a[maxn]; int main(void)
{
int T;
scanf("%d",&T);
while(T--)
{
int N;
scanf("%d",&N);
for(int i = ; i <= N; i++) scanf("%I64d",a+i);
LL ans = 0LL, Max = 0LL;
for(int i = N; i >= ; i--)
{
if(a[i] > Max) Max = a[i];
else ans += Max - a[i] ;
}
printf("%I64d\n",ans);
}
return ;
}

参考代码

H.拉面女神的生日派对

简析:二分每个人分到的蛋糕大小 x ,每次check 能够分出的块数 tot 是否 >= n

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <ctime>
using namespace std; const int maxn = + ;
const int INF = 0x3f3f3f3f; int n, m;
int a[maxn]; bool check(int x) {
long long tot = ;
for(int i = ; i < m; i++) {
tot += a[i] / x;
}
return tot >= n;
} int main()
{
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout); int T; scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
for(int i = ; i < m; i++) scanf("%d", a + i); if(!check()) {
printf("0\n");
continue;
} int L = , R = INF;
while(L < R) {
int mid = (L + R) / + ;
if(check(mid)) L = mid;
else R = mid - ;
} printf("%d\n", L);
} // printf("Time used = %.3f\n", (double)clock() / CLOCKS_PER_SEC);
return ;
}

参考代码

I.拉面女神的魔盒

简析:  按照题意bfs,状态数不会超过1e6 ,所以可以bfs一遍预处理出所有的答案

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
const int maxn = ;
typedef pair<int, int> pii;
int tmp[], cur[], ans[maxn]; int id(int * a)
{
int ret = a[];
for(int i = ; i <= ; i++)
ret = ret * + a[i];
return ret;
} void change(int no)
{
for(int i = ; i >= ; i--)
cur[i] = no % , no /= ;
return;
} void BFS()
{
queue<pii> q;
q.push(pii(,));
ans[] = ;
while(!q.empty())
{
pii tmp = q.front(); q.pop();
int now = tmp.first, t = tmp.second;
change(now);
int Next, n[], sum = , odd = ;
memcpy(n, cur, sizeof(n));
for(int i = ; i <= ; i++)
{
sum += cur[i];
if(cur[i] % ) odd++;
} n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;} n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;} n[] = cur[]; if(odd == )
{
n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;} n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;} n[] = cur[];
} n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;}
n[] = cur[]; n[] = (cur[] + (sum % + ) ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;}
n[] = cur[]; if(cur[] + cur[] + cur[] == )
{
n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;} n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;} n[] = cur[];
} if(cur[] == )
{
n[] = (cur[] + ) % ;
Next = id(n);
if(ans[Next] == -){q.push(pii(Next, t+)); ans[Next] = t + ;}
} }
return;
} int main(void)
{
// freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
memset(ans, -, sizeof(ans));
BFS();
int T;
scanf("%d", &T);
while(T--)
{
for(int i = ; i <= ; i++) scanf("%d", tmp + i);
printf("%d\n", ans[id(tmp)]);
}
return ;
}

参考代码

J.草滩小王子与炫酷魔方

简析:

~end~

CHD 2015迎新杯题解的更多相关文章

  1. CHD 2014迎新杯比赛题解

    A. 草滩的魔法学校 分析: 高精度乘法 或 JAVA大数类 很明显 10000 的阶乘已经远远超过 64 位数能表示的范围了.所以我们要用一个比较大的数组来存放这个数.那数组要开多少位合适呢?我们不 ...

  2. chd校内选拔赛题目+题解

    题目链接   A. Currency System in Geraldion 有1时,所有大于等于1的数都可由1组成.没有1时,最小不幸的数就是1. #include<iostream> ...

  3. SCOI 2015 Day2 简要题解

    「SCOI2015」小凸玩密室 题意 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边 ...

  4. SCOI 2015 Day1 简要题解

    「SCOI2015」小凸玩矩阵 题意 一个 \(N \times M\)( $ N \leq M $ )的矩阵 $ A $,要求小凸从其中选出 $ N $ 个数,其中任意两个数字不能在同一行或同一列, ...

  5. Boston Key Party 2015 Heath Street 题解(Writeup)

    Heath Street是Boston Key Party 2015的一道数字取证题目,我们得到了一个叫做“secretArchive.6303dd5dbddb15ca9c4307d0291f77f4 ...

  6. 【2015蓝桥杯省赛】C++ B组试题

    1.奖券数目 作答:52488,正确 #include <iostream> using namespace std; bool check(int x) { ] = { }; while ...

  7. BZOJ4104:[Thu Summer Camp 2015]解密运算——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4104 对于一个长度为N的字符串,我们在字符串的末尾添加一个特殊的字符".".之 ...

  8. 长安大学第四届ACM-ICPC“迎新杯”程序设计竞赛-重现赛 G - 彩虹岛套娃

    题目描述 俄罗斯套娃是俄罗斯特产的木制玩具,一般由多个一样图案的空心木娃娃一个套一个组成,最多可达十多个,通常为圆柱形,底部平坦可以直立.颜色有红色,蓝色,绿色,紫色等.最普通的图案是一个穿着俄罗斯民 ...

  9. 长安大学第四届ACM-ICPC“迎新杯”程序设计竞赛-重现赛 H - 圣诞节糖果

    题目描述 圣诞节临近,彩虹岛的黑心商人

随机推荐

  1. Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数

    首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...

  2. idea中ajax中文乱码

    case:@RequestMapping中添加 produces= "text/plain;charset=UTF-8", @RequestMapping(method = Req ...

  3. sql 进制转换,支持93内的进制相互转换

    功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充 -- ====================================== ...

  4. NHibernate:教你如何搭建数据访问层?

    NHibernate:教你如何搭建数据访问层? 什么是NHibernate NHibernate 是一个基于.net 的针对关系型数据库的对象持久化类库.NHibernate 来源于非常优秀的基于Ja ...

  5. C#伪彩色处理

    伪彩色处理是指将灰度图像转换成彩色图象.因为人眼对于彩色的分辨能力远高于对灰度图像的分辨能力,所以将灰度图像转换成彩色可以提高人眼对图像细节的辨别能力.伪彩色并不能真实的反映图像像的彩色情况. 效果图 ...

  6. 怎么让猫吃辣椒 转载自 xiaotie

    典故: 某日,毛.周.刘三人聊天. 毛:怎么能让猫自愿吃辣椒? 刘:掐着脖子灌. 毛:强迫不是自愿. 周: 先饿几天,再混到猫爱吃的东西里. 毛:欺骗不是自愿.把辣椒涂到猫肛门上,它就会自己去舔了. ...

  7. c#一个简单的实例告诉你,多继承还可以这么来

    我想多继承,要怎么搞???我想你一定会说“接口”,那么你有没有遇到这样的问题,你需要在一个类中继承另外2个类的所有方法,你要怎么做呢???难道要Coyp实现代码?No,往下看... 定义一个空接口比如 ...

  8. C#类的初始化

      类的构造函数 类的构造函数,有实例构造函数和静态构造函数.如果我们没有构造函数,系统会为我们生成一个默认构造函数,如果我们已经定义了构造函数,系统就不会再为我们生成构造函数. class Simp ...

  9. json在线编辑器

    今天搭建了一个json在线的编辑器. 这个主要的功能就是解析和检查json的语法是不是有错误.在使用json的时候,最担心的就是语法的问题了.尤其是自己手动去拼json格式的输出时候. 如图所示,左边 ...

  10. 5个Unix命令

    5个Unix命令 原文: http://spin.atomicobject.com/2013/09/09/5-unix-commands/ 希望早几年知道的5个Unix命令 使用*nix系统已经有一段 ...