qduoj 河神的难题 思维 实验室腊新呐 枚举

来源:互联网 发布:hough变换检测圆算法 编辑:程序博客网 时间:2024/05/17 17:17

河神的难题

发布时间: 2017年6月23日 22:53   最后更新: 2017年6月23日 22:57   时间限制: 1000ms   内存限制: 128M

 一天ycb老师高兴的走在小河边,嘴里哼着小曲,突然河神从河里跳了出来,手里拿着一本《顶级游戏设计》。

河神对ycb老师说:"孩子你想要这本书吗?"要知道ycb老师早就想要一本游戏书了,所以y老师高兴的跳了起来,大喊着:"我要我要!".

谁知河神一本正经的说:"我的书只能送给配的上它的人,我现在出个题来考考题,如果你可以答上来我就把这本书送给你好了。"

    

    "现在给你一个字符串s,定义一个二维数组b,对于数组中的每个元素 bij=si*sj ,再给你一个整数a,问你在这个二维数组b中可以找出

多少个子二维数组使得各个元素的和加起来等于a,输出所有解的个数?"

     ycb老师对于这个问题很头疼,聪明的你们能帮帮他吗?

第一行包含一个整数a (0<=a<=1e9)
第二行包含一个字符串s (1<=|s|<=600)

输出一个整数,表示所有解的个数.

 复制
16439873893693495623498263984765
40
 复制
01230
19

矩阵的和等于 行值和乘以列值和,可以写几个推出来,所以就可以枚举所有的列值和,复杂度是n^2,显然列值和情况和行值和情况是一样的,对于每个列值和,求有多少种行值和等于(a/列值和),

最后在特判一下0就可以了


#include <vector>#include <iostream>#include <map>using namespace std;map <long long , long long> cnt;int a;string s;int main(){cin >> a >> s;long long ans = 0,zero=0,flog = -1;for(int i = 0; i < s.size(); i++) {long long sum = 0;for(int j = i; j < s.size(); j++) {sum += s[j] - '0';if(sum == 0 ) {zero++;continue;}if( a / sum != sum && a % sum == 0)ans += 2 * cnt[a / sum];cnt[sum]++;}}for(int i = 0; i*i <= a; i++)if(i*i == a) flog = i;if(a==0)    cout << 2 * zero * s.size() * (1 + s.size()) / 2 - zero * zero << endl;    elsecout << ans + (flog== -1 ? 0 : cnt[flog] * cnt[flog]) << endl;return 0;}



实验室腊新呐

发布时间: 2017年6月23日 22:53   最后更新: 2017年6月23日 22:55   时间限制: 1000ms   内存限制: 128M

 实验室要纳新了,李楚凡同学很轻松的就通过了纳新测试,被纳入实验室的同学会被分成由七位学长带领的七个小组,而这七位学长都有着各自的脾气,有各自的要求,

现在不考虑同学之间的差异,只考虑每个小组之间的数量差异,根据下面每位学长的要求,求有多少种不同分配的方案数(当两种方案里存在一个小组有着不同的数量就

可以说这两种分配方案不同)。

包老师:两眼 是独相随,我的小组人数必须是偶数。

杨老师:我是最帅的,所以我的小组人数也必须是最多的。

炸老师:我是杨老师忠粉,所以杨老师的小组人数是我的小组人数的两倍。

谭老师:理应我是最大的,但我甘心在杨老师下面,所以我的小组人数仅次于杨老师(人数只比杨老师小)。

刘老师:我的小组人数各位上的位数之和是奇数。

闫老师:我的小组人数必须是个素数。

L老师:好脾气,我的小组人数多少都可以。

李院长看到这七个死**正经事没做多少,要求倒不少,怒斥道:"你们七个小组的人数总和必须是x,并且每个小组人数都不能超过16个并且不能少于1个。"

根据上述所有要求,给出整数x,求所有的不同的方案数。

多组输入,以EOF结束
每组输入一个整数x(0<x<=112)

每组输出方案数a

 复制
1412
10

七个for循环,仔细判断一下

#include<bits/stdc++.h>using namespace std;int main(){int ans=0;int su[6]={2,3,5,7,11,13};int x;int bao,yang,zhai,tan,liu,yan,l;while(cin>>x){ans=0;for(tan=1;tan<=16;tan++){for(yang=tan+1;yang<=16;yang++){if(yang&1);else{for(bao=2;bao<=tan;bao+=2){for(liu=1;liu<=tan;liu++){if(liu<10&&liu&1||liu>=10&&!(liu&1)){for(yan=0;yan<6;yan++){if(su[yan]<=tan){for(l=1;l<=tan;l++){if(yang+tan+bao+yang/2+liu+su[yan]+l==x&&yang/2<=tan){//cout<<bao<<" "<<yang<<" "<<yang/2<<" "<<tan<<" "<<liu<<" "<<su[yan]<<" "<<l<<endl;ans++;}}}}}}}}}}cout<<ans<<endl;}return 0;}


原创粉丝点击