疑惑题目:P5461 赦免战俘
至于这一题,它的AC代码非常诡异,我虽然AC了,却不知道WHY。
希望神犇们可以TELL ME WHY。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;
long long a[10001][10001];
int main() {
cin>>n;
n=(1<<n);
a[0][n+1]=1;
for(register int i=1; i<=n; i++) {
for(register int j=1; j<=n; j++) {
a[i][j] = a[i-1][j]^a[i-1][j+1];
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
最不理解的地方:
a[i][j] = a[i-1][j]^a[i-1][j+1];
为什么这个东西进行一次^运算就可以了??
这一题本来想用递归来做,但是看到这一种做法后,我沉默了。
请大佬指点QWQ。
还有一题:
只有40分,题目太恶心了。
代码:
#include <bits/stdc++.h>
using namespace std;
int s[4]={0};
string a;
int iff(){
for(int i=0;i<a.length();i++){
if(a[i]=='.'){
return 1;
}else if(a[i]=='/'){
return 2;
}else if(a[i]=='%'){
return 3;
}else{
return 4;
}
}
}
int main() {
cin>>a;
int len=a.length();
if(iff()==4){
for(int i=len-1;i>=0;i--) cout<<a[i];
}else if(iff()==3){
for(int i=len-2;i>=0;i--){
if(a[i]!='0')cout<<a[i];
}
cout<<"%";
}else if(iff()==2){
int mm=0;
for(int i=len-1;i>=0;i--){
if(a[i]=='/') mm=i;
}
for(int i=mm-1;i>=0;i--){
if(a[i]!='0') cout<<a[i];
}
cout<<"/";
for(int i=len-1;i>mm;i--){
if(a[i]!='0') cout<<a[i];
}
}else{
int mm=0,summ=0;
for(int i=len-1;i>=0;i--){
if(a[i]=='.') mm=i;
if(a[i]=='0') summ++;
}
for(int i=mm-1;i>=0;i--){
if(a[i]!='0') cout<<a[i];
}
cout<<".";
for(int i=len-1;i>mm;i--){
if(a[i]=='0' && summ<mm) continue;
else cout<<a[i];
}
}
return 0;
}
求助求助。