链接:
https://www.nowcoder.com/acm/contest/93/B
来源:牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
给你一个n*n矩阵,按照顺序填入1到n*n的数,例如n=5,该矩阵如下
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
现在让你连接相邻两条边的中点,然后只保留他们围成封闭图形区域的数字,那么这个矩阵变为
|
| 3 |
|
|
| 7 | 8 | 9 |
|
11 | 12 | 13 | 14 | 15 |
| 17 | 18 | 19 |
|
|
| 23 |
|
|
现在你们涵哥让你求变化后的矩阵的所有元素的和为多少
输入描述:
输入第一行一个整数T(1<=T<=100) 接下来有T组测试数据,每组测试数据输入一个整数n(3<=n<=10000) 保证输入的n为奇数
输出描述:
对于每组测试数据,输出对应答案
分析:m错设为int型,ans+=m*k;时,是先将m*k再转为longlong型赋给ans,所以int会在乘的时候越界。
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#define ll long long
using namespace std;
int main(){
int t,n;
scanf("%d",&t);
while(t--){
ll ans=0;
scanf("%d",&n);
int k=1,flag=0;
ll m=n/2+1;
for(int i=1;i<=n;i++){
ans+=m*k;
m+=n;
if(!flag)k+=2;
else k-=2;
if(k==n)flag=1;
}
printf("%lld\n",ans);
}
}
链接:https://www.nowcoder.com/acm/contest/93/F
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
你们wyh学长给你n个点,让你分成2个集合,然后让你将这n个点进行两两连接在一起,连接规则是这样的
1. 连接的两个点必须在不同的两个集合
2. 一个集合内部任意两个点之间不能相连
现在,wyh学长需要让你将这n个点任意分成2个集合之后,最多能连接多少条边?
输入描述:
输入第一行一个整数T(1<=T<=100000) 接下来T组测试数据,每组测试数据输入一个整数n(1<=n<=100000)
输出描述:
对于每组测试数据,输出对应答案
分析:m错设成int型,ans=m*m;先把m*m再转化成longlong型,赋给ans,所以m为int型时可能越界。
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#define ll long long
using namespace std;
int main(){
int t,n;
ll ans;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
ll m=n/2;
if(n%2==0){
ans=m*m;
}
else{
ans=m*(m+1);
}
printf("%lld\n",ans);
}
}
总结:与longlong型数运算的数,尽量也设成longlong型。