博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数学.前左上计数法】【HDU1220】Cube
阅读量:5830 次
发布时间:2019-06-18

本文共 2206 字,大约阅读时间需要 7 分钟。

Cube

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1396    Accepted Submission(s): 1106


Problem Description
Cowl is good at solving math problems. One day a friend asked him such a question: You are given a cube whose edge length is N, it is cut by the planes that was paralleled to its side planes into N * N * N unit cubes. Two unit cubes may have no common points or two common points or four common points. Your job is to calculate how many pairs of unit cubes that have no more than two common points.
Process to the end of file.
 

Input
There will be many test cases. Each test case will only give the edge length N of a cube in one line. N is a positive integer(1<=N<=30).
 

Output
For each test case, you should output the number of pairs that was described above in one line.
 

Sample Input
 
1 2 3
 

Sample Output
 
0 16 297
Hint
Hint
The results will not exceed int type.
 

Author
Gao Bo
 

Source
 

Recommend
Ignatius.L   |   We have carefully selected several similar problems for you:            
 

我的做法比较沙茶  直接枚举N*N*N旁边的有多少个 访问过的设置成0

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#define oo 0x13131313using namespace std;int map[51][51][51];int N;long long ans;void CLEAR(){ for(int i=0;i<=50;i++) for(int j=0;j<=50;j++) for(int k=0;k<=50;k++) { map[i][j][k]=0; } for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) for(int k=1;k<=N;k++) { map[i][j][k]=1; } ans=0;}void getans(int a,int b,int c){ if(map[a][b][c-1]==1) ans++; if(map[a][b][c+1]==1) ans++; if(map[a+1][b][c]==1) ans++; if(map[a-1][b][c]==1) ans++; if(map[a][b-1][c]==1) ans++; if(map[a][b+1][c]==1) ans++;}void solve(){ for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) for(int k=1;k<=N;k++) { getans(i,j,k); map[i][j][k]=0; }}int main(){// freopen("a.in","r",stdin);// freopen("a.out","w",stdout); while(cin>>N) { CLEAR(); solve(); ans=(N*N*N)*(N*N*N-1)/2-ans; cout<
<

实际答案是
数学做法

通过前左上的枚举方法 很好的去避免了重复计数的可能 很不错的枚举思路

#include
using namespace std;int main(){ int n; while(cin>>n) cout<<(n*n*n*(n*n*n-1))/2-3*(n*n)*(n-1)<

转载于:https://www.cnblogs.com/zy691357966/p/5480448.html

你可能感兴趣的文章
问题账户需求分析
查看>>
JavaSE-代码块
查看>>
爬取所有校园新闻
查看>>
32、SpringBoot-整合Dubbo
查看>>
python面向对象基础
查看>>
HDU 2044 一只小蜜蜂(递归)
查看>>
docker 下 安装rancher 笔记
查看>>
spring两大核心对象IOC和AOP(新手理解)
查看>>
数据分析相关
查看>>
Python LDAP中的时间戳转换为Linux下时间
查看>>
微信小程序蓝牙连接小票打印机
查看>>
环境错误2
查看>>
C++_了解虚函数的概念
查看>>
全新jmeter视频已经上架
查看>>
Windows 8下如何删除无线配置文件
查看>>
oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
国外10大IT网站和博客网站
查看>>
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>