太痛苦了
cqr出题堪比李老师
今天改不动题,打了往年回放和一本通域的题库题
[CSP-J2020] 优秀的拆分
改后AC,一开始想的太复杂了,利用贪心思想就能AC了
#include<bits/stdc++.h>
using namespace std;
long long n,a[30];
int main() {
freopen("power.in","r",stdin);
freopen("power.out","w",stdout);
cin>>n;
if(n%2==1) {
cout<<-1;
return 0;
}
a[1]=1;
for(int i=2;i<=26;i++)a[i]=a[i-1]*2;
for(int i=26;i>=2;i--)
if(n>=a[i]) {
cout<<a[i]<<" ";
n=n-a[i];
}
return 0;
}
[CSP-J 2021] 网络连接
仍在改进,感觉越打越乱,不知道错哪了
#include<bits/stdc++.h>
using namespace std;
int n,i,j,q=1,pos,ans,o,u;
bool f=true;
struct Computer {
int num=0;
string s1,s2;
char s3[4];
} a[10001];
int main () {
cin>>n;
for(i=1; i<=n; i++) {
cin>>a[i].s1>>a[i].s2;
a[i].num=a[i-1].num+1;
}
for(i=1; i<=n; i++) {
int c=1;
for(j=1; j<=a[i].s2.size(); i++) {
if(a[i].s2[j]=='.' && a[i].s2[j]==':' && j==a[i].s2.size()) {
if(a[i].s2[j]=='.')ans++;
if(a[i].s2[j]==':')pos++;
if(j==a[i].s2.size()) {
if(a[i].s2[q]=='0') {
a[i].s3[1]='E';
a[i].s3[2]='R';
a[i].s3[3]='R';
break;
}
/*统计字符个数,特判':'之后*/
int v=j-q;
for(int op=v; op>=1; op--) {
o += (int)a[i].s2[q] * v;
}
if(o>65535 || o<0) {
a[i].s3[1]='E';
a[i].s3[2]='R';
a[i].s3[3]='R';
break;
}
//判断':'之后
q=j+1;
}
if(a[i].s2[q]=='0') {
a[i].s3[1]='E';
a[i].s3[2]='R';
a[i].s3[3]='R';
break;
}
//特判'.'与':'之前
int v=j-q;
for(int op=v; op>=1; op--) {
u += (int)a[i].s2[q] * v;
}
if(u>255 || u<0) {
a[i].s3[1]='E';
a[i].s3[2]='R';
a[i].s3[3]='R';
break;
}
//判断'.'与':'之前
q=j+1;
}
}
if(ans!=3 || pos!=1) {
a[i].s3[1]='E';
a[i].s3[2]='R';
a[i].s3[3]='R';
}
//特判字符个数
ans=0,pos=0,o=0,u=0;
//归零
}
for(i=1; i<=n; i++) {
if(a[i].s3[1]=='E')continue;
for(q=1; q<=n; q++) {
if(a[q].s3[1]=='E')continue;
if(a[i].s2.size() != a[q].s2.size())continue;
//特判,加快循环
for(j=1; j<=a[i].s2.size(); j++) {
if(a[i].s2[j] != a[q].s2[j]) {
f=false;
break;
}
}
if(f==true) {
if(a[i].s1[1]=='S' && a[q].s1[q]=='C') {
a[i].s3[1]='O';
a[i].s3[2]='K';
a[q].s3[1]=(char)a[i].num;
}
if(a[i].s1[1]=='C' && a[q].s1[q]=='S') {
a[q].s3[1]='O';
a[q].s3[2]='K';
a[i].s3[1]=(char)a[i].num;
}
//
}
}
}
for(i=1; i<=n; i++) {
for(j=1; j<=strlen(a[i].s3); j++) {
cout<<a[i].s3[j];
}
cout<<endl;
}
return 0;
}
[CSP-J 2022] 解密
RTE,要用二分算法,但不会,打算明天找个时间做一下
用的暴力解
#include<bits/stdc++.h>
using namespace std;
int n,e,d,f,k;
int main( ) {
freopen("decode.in","r",stdin);
freopen("decode.out","w",stdout);
cin>>k;
for(int i=1; i<=k; i++) {
cin>>n>>d>>e;
for(int j=1; j<=sqrt(n); j++) {
if((j+n/j==n-e*d+2) && (n%j==0)) {
cout<<j<<" "<<n/j<<"\n\n";
f=1;
break;
}
}
if(!f) {
cout<<"NO\n\n";
} else {
f=0;
}
}
return 0;
}
题库水题复习以前的算法,不具体讨论