脑洞太大,简单东西就是想复杂,活该一直DIV2;
A:水,基本判断A[I]<=A[I-1],ANS++;
B:不知道别人怎么做的,我的是100*N*N;没办法想的太多了,忘记是连续的数列
我们枚举公差,找到能有多少就可以了。
C:想到MAP,但是前面太脑掺,只有几分钟写。。
不过还真不一定写的出来。。
进来DP感觉良好。。
我们可以发现其实这些的乘积其实比较少。。
然后就像普通数组进行加法一样。
1 #include <cstdlib> 2 #include <cctype> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <algorithm> 7 #include <vector> 8 #include <string> 9 #include <iostream> 10 #include <sstream> 11 #include <map> 12 #include <set> 13 #include <queue> 14 #include <stack> 15 #include <fstream> 16 #include <numeric> 17 #include <iomanip> 18 #include <bitset> 19 #include <list> 20 #include <stdexcept> 21 #include <functional> 22 #include <utility> 23 #include <ctime> 24 using namespace std; 25 26 #define PB push_back 27 #define MP make_pair 28 29 #define REP(i,n) for(i=0;i<(n);++i) 30 #define FOR(i,l,h) for(i=(l);i<=(h);++i) 31 #define FORD(i,h,l) for(i=(h);i>=(l);--i) 32 33 typedef vector<int> VI; 34 typedef vector<string> VS; 35 typedef vector<double> VD; 36 typedef long long ll; 37 typedef pair<int,int> PII; 38 #define mod 1000000007 39 40 41 map<ll,ll> a[111]; 42 class GoodSubset 43 { 44 public: 45 int numberOfSubsets(int goodValue, vector <int> d) 46 { 47 int n=d.size(); 48 ll ret=0; 49 for (int i=0;i<n;i++) 50 { 51 for (int j=0;j<i;j++) 52 { 53 for (map<ll,ll>::iterator it=a[j].begin();it!=a[j].end();it++) 54 { 55 ll now=it->first; 56 int h=it->second; 57 if (goodValue%now==0) 58 { 59 a[i][now*d[i]]+=h; 60 a[i][now*d[i]]%=mod; 61 } 62 } 63 } 64 a[i][d[i]]++; 65 a[i][d[i]]%=mod; 66 ret+=a[i][goodValue]; 67 ret%=mod; 68 } 69 return ret; 70 } 71 }; 72 73 int main() //模拟数据自测用 74 { 75 int n,m; 76 cin>>n>>m; 77 vector<int> p; 78 for (int i=0;i<m;i++) 79 { 80 int x; 81 cin>>x; 82 p.push_back(x); 83 } 84 GoodSubset x; 85 cout<<x.numberOfSubsets(n,p); 86 return 0; 87 } 88 89 90 //代码还是很好看懂的 91 // Powered by FileEdit 92 // Powered by TZTester 1.01 [25-Feb-2003] 93 // Powered by CodeProcessor
时间: 2024-10-11 17:08:40