A直接暴力好了。
1 #include2 typedef long long ll; 3 using namespace std; 4 5 int pan(ll x) 6 { 7 while (x) 8 { 9 if (x%10==8) return 1;10 x/=10;11 }12 return 0;13 }14 15 int main()16 {17 ll n;18 cin>>n;19 for (int i=1;i<=10000;i++)20 if (pan(abs(n+i)))21 {22 cout<
B:处理起来比较蛮烦,或则我比较懒。
大概思路是:先判n==4
2:n==0,预设定一个数。
3:N==1,可以用数学算出来;
N==2&&N==3的情况比较难讨论。但是ai<=500;看到直接暴力的思路;
C:暴力即可。
我们知道所有值都在100以内。所以我们可以暴力攻击和防御值买多少,然后算HP。因为HP可能买很多。
这样循环数不会很多。
1 #include2 typedef long long ll; 3 using namespace std; 4 5 int hpy,atky,defy; 6 int hpm,atkm,defm; 7 8 9 10 int pan(int b,int c)11 {12 13 int tatky=atky+b;14 int tdefy=defy+c;15 if (tatky<=defm) return -1;16 17 int tmp=tatky-defm;18 19 int ti=hpm/tmp;20 if (hpm%tmp) ti++;21 22 if (atkm<=tdefy) return 0;23 24 tmp=atkm-tdefy;25 26 if (ti*tmp >hpy>>atky>>defy;36 cin>>hpm>>atkm>>defm;37 cin>>h>>a>>d;38 39 int ans=1<<30;40 41 42 for (int j=0;j<4000;j++)43 for (int k=0;k<4000;k++)44 {45 if (pan(j,k)==-1) continue;46 ans=min(ans,pan(j,k)*h+a*j+d*k);47 }48 49 cout< <
D:思路很多:线段树,单调队列。
我看到的一种做法。。。
1 #include2 using namespace std; 3 4 int a[123456]; 5 int n,L,s; 6 int flag=1; 7 int main() 8 { 9 int left,right;10 int ans=0;11 cin>>n>>s>>L;12 int last=0;13 for (int i=0;i >a[i];14 15 int pos=0;16 for (;pos =last)35 {36 maxm=max(maxm,a[left ]);37 minm=min(minm,a[left ]);38 if (maxm-minm<=s) cnt++;39 else break;40 left--;41 }42 left++;43 if (cnt
http://www.cnblogs.com/AOQNRMGYXLMV/p/4116052.html。
这里有讲解。
然后我再分析一下
7 2 2 1 3 1 2 4 1 2 样例: 先把1 3 1 2放入第一组。 last的值是3(下标从0开始); 下次循环时可以在left到last中再找,就是4,2两个数一组。