Team Round(Training)系列:每周六12:15-17:15
这一场是在9月21日打的,是2017ICPC沈阳站(搬题人:Wqr_(威威大毒瘤,dqy都自闭了))
写了KIF
就感觉思路不够开阔把,有点盲目自信,认为现场赛很多人过了就不难,把题目想的简单化。
K:左右各扫一次
1 | /************************************************ |
I:大数加法 求a+b+c+d a,b,c,d在2^62范围内
java代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import java.math.BigInteger;
import java.util.Scanner;
class Main{
public static void main(String[] args) {
int t;
Scanner sc = new Scanner(System.in);
t = sc.nextInt();
while(t > 0){
t--;
BigInteger a = sc.nextBigInteger();
BigInteger b = sc.nextBigInteger();
BigInteger c = sc.nextBigInteger();
BigInteger d = sc.nextBigInteger();
BigInteger out = BigInteger.ZERO;
out = out.add(a);
out = out.add(b);
out = out.add(c);
out = out.add(d);
System.out.println(out.toString());
}
}
}
事实上数据给的是ull范围,处理一下2^64就行了
cpp代码1:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using namespace std;
typedef unsigned long long ULL;
int main()
{
int t;
scanf("%d", &t);
while(t--) {
ULL a, b, c, d, maxv = ((ULL)1 << 62);
scanf("%llu%llu%llu%llu", &a, &b, &c, &d);
if(a == maxv && b == maxv && c == maxv && d == maxv)
printf("18446744073709551616\n"); // 4个2^62之和
else
printf("%llu\n", a + b + c + d);
}
return 0;
}
cpp模拟加法写法: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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using namespace std;
typedef long long ll;
const int maxn=100005;
ll temp;
void add(char* a,char* b,char* c)
{
int i,j,k,max,min,temp;
char *s,*pmax,*pmin;
max=strlen(a);
min=strlen(b);
if (max<min)
{
temp=max;
max=min;
min=temp;
pmax=b;
pmin=a;
}
else
{
pmax=a;
pmin=b;
}
s=(char*)malloc(sizeof(char)*(max+1));
s[0]='0';
for (i=min-1,j=max-1,k=max;i>=0;i--,j--,k--)
s[k]=pmin[i]-'0'+pmax[j];
for (;j>=0;j--,k--)
s[k]=pmax[j];
for (i=max;i>=0;i--)
if (s[i]>'9')
{
s[i]-=10;
s[i-1]++;
}
if (s[0]=='0')
{
for (i=0;i<=max;i++)
c[i-1]=s[i];
c[i-1]='\0';
}
else
{
for (i=0;i<=max;i++)
c[i]=s[i];
c[i]='\0';
}
free(s);
}
int main(){
ios::sync_with_stdio(false);
int n;
while(cin>>n){
while(n--){
char a[105],b[105],c[105],d[105],ans[105];
cin>>a>>b>>c>>d;
add(a,b,ans);
add(ans,c,ans);
add(ans,d,ans);
cout<<ans<<endl;
}
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「html_11」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq1013459920/article/details/82634156
cpp代码3:long double 就行了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
26
27
28
29
30
31
32
33
using namespace std;
void scan() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
}
const int maxn = 1e6 + 7;
ll a[maxn], b[maxn];
int main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
scan();
int t;
cin >> t;
while (t--) {
long double a, b, c, d;
cin >> a >> b >> c >> d;
cout << fixed << setprecision(0) << (a + b + c + d) << endl;
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「布呗之路」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hypHuangYanPing/article/details/99694803
F:打表找规律
我写这道题时候打表打的有点多,到后面很迷惑人,double出锅,如果只看前几项容易得到 a[n] = 4*a[n-1] - a[n] - 2;
1 | import java.math.BigInteger; |
附c++大数模板
1 |
|
补题:
L题:
1 |
|