标签:bool div ber for ble multi next you code
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int T; 6 scanf("%d",&T); 7 while (T--) 8 { 9 long long n; 10 scanf("%lld",&n); 11 if(n%3==0) 12 { 13 printf("%lld\n",(n/3)*(n/3)*(n/3)); 14 } else if(n%4==0) 15 { 16 printf("%lld\n",(n/2)*(n/4)*(n/4)); 17 } 18 else printf("-1\n"); 19 20 21 } 22 return 0; 23 }
HDU 6301
先对给定的区间排序,然后每次讲前一个比后一个区间多出的部分加入优先对列,找到最小的然后放到ans数组。这个代码有点卡时间,
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 5 const int MAXN = 1e5+10; 6 7 8 int t,n,m; 9 10 int ans[MAXN]; 11 struct node{ 12 int l,r; 13 }p[MAXN],pre; 14 struct CMP{ 15 bool operator ()(int a,int b){ 16 return a > b; 17 } 18 }; 19 bool cmp(node a,node b){ 20 if(a.l!=b.l) return a.l < b.l; 21 else return a.r > b.r; 22 } 23 24 int main(){ 25 scanf("%d",&t); 26 while(t--){ 27 memset(ans,0,sizeof(ans)); 28 memset(p,0,sizeof(p)); 29 scanf("%d%d",&n,&m); 30 priority_queue<int, vector<int>,CMP>Q; 31 for(int i=0;i<m;i++){ 32 scanf("%d%d",&p[i].l,&p[i].r); 33 } 34 sort(p,p+m,cmp); 35 int maxx = 1; 36 pre.l = p[0].l; 37 pre.r = p[0].r; 38 for(int i=1;i<=p[0].r-p[0].l+1;i++){ 39 ans[p[0].l+i-1] = i; 40 maxx = max(maxx,i); 41 } 42 for(int i=1;i<m;i++){ 43 if(p[i].r <= pre.r) continue; 44 else { 45 for(int j=pre.l;j<min(p[i].l,pre.r+1);j++){ 46 Q.push(ans[j]); 47 } 48 int temp =max(pre.r+1,p[i].l); 49 while(!Q.empty()&&temp<=p[i].r){ 50 ans[temp++]=Q.top(); 51 Q.pop(); 52 } 53 if(temp<=p[i].r){ 54 for(int k=temp;k<=p[i].r;k++){ 55 ans[k]=++maxx; 56 } 57 } 58 } 59 pre.l=p[i].l; 60 pre.r=p[i].r; 61 } 62 for(int i=1;i<=n;i++){ 63 if(ans[i]==0)ans[i]=1; 64 } 65 for(int i=1;i<n;i++){ 66 printf("%d ",ans[i]); 67 }printf("%d\n",ans[n]); 68 } 69 return 0; 70 }
标签:bool div ber for ble multi next you code
原文地址:https://www.cnblogs.com/-xiangyang/p/9356952.html