- 伍衍 的博客
DAY4(8)
- @ 2024-8-9 19:20:11
考试错误:无。
思路:
直接模拟输出,只要注意多加几个特判即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[150];
signed main(){
freopen("poly.in","r",stdin);
freopen("poly.out","w",stdout);
int n;
cin >> n;
for(int i=n;i>=0;i--){
cin >> a[i];
}for(int i=n;i>=0;i--){
if(a[i]==0) continue;
else if(a[i]<0) cout << "-";
else if(i!=n) cout << "+";
a[i]=abs(a[i]);
if(a[i]!=1||i==0) cout << a[i];
if(i!=0&&i!=1) cout << "x^" << i;
if(i==1) cout << "x";
}
}
考试错误:没有考虑到个密文对应一个明文的情况,导致得了分。
思路:
一道大模拟,直接按题目意思来即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int mm[26];
signed main(){
freopen("spy.in","r",stdin);
freopen("spy.out","w",stdout);
memset(mm,-1,sizeof mm);
string a1,a2;
string m;
cin >> a2 >> a1 >> m;
for(int i=0;i<a1.size();i++){
if(mm[a2[i]-'A']!=-1&&mm[a2[i]-'A']!=a1[i]-'A'){
cout << "Failed";
return 0;
}
else{
mm[a2[i]-'A']=a1[i]-'A';
}
}
string f,jk;
for(int i=0;i<=25;i++){
if(mm[i]==-1||jk.find(mm[i]+'A')!=-1){
cout << "Failed";
return 0;
}jk.push_back(mm[i]+'A');
}
for(int i=0;i<m.size();i++){
f=f+char(mm[m[i]-'A']+'A');
}
cout << f;
}
考试错误:没做。
思路:
首先将质因数分解,再讲每个质因数的个数乘以,最后判断每个输的约数够不够,求一个即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
pair<int,int> m[30050];
int m1,m2,_size;
int a[10050];
void divide(int n){
for(int i=2;i<=n/i;i++){
if(n%i==0){
int cnt=0;
m[++_size].first=i;
while(n%i==0){
n/=i;
cnt++;
}
m[_size].second=cnt*m2;
}
}
if(n>1){
m[++_size].first=n;
m[_size].second=m2;
}
}
int solve(int f){
int res=0;
for(int i=1;i<=_size;i++){
if(f%m[i].first!=0) return -1;
int cnt=0;
int ff=f;
while(ff%m[i].first==0){
ff/=m[i].first;
cnt++;
}
res=max(res,(m[i].second+cnt-1)/cnt);
}
return res;
}
signed main(){
freopen("cell.in","r",stdin);
freopen("cell.out","w",stdout);
int n;
cin >> n >> m1 >> m2;
divide(m1);
int Min=0xffffffff;
for(int i=1;i<=n;i++){
cin >> a[i];
int x=solve(a[i]);
if(x!=-1) Min=min(Min,x);
}
if(Min==0xffffffff){
cout << -1;
return 0;
}
cout << Min;
return 0;
}
考试错误:还是没做。
思路:
:
初始化:
状态转移方程:(表示机器人拾取到的金币数量,表示第个机器人的价格);
输出:
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1010;
int a[N][N],f[N],cost[N];
signed main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
int n,m,p;
cin >> n >> m >> p;
memset(f,-2e9,sizeof f);
f[0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];
}
}for(int i=1;i<=n;i++){
cin >> cost[i];
}
int sum=0;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
sum=0;
for(int k=1;k<=min(p,i);k++){
int last;
if(j-k<=0) last=(j-k)%n+n;
else last=j-k;
sum+=a[last][i-k+1];
f[i]=max(f[i-k]+sum-cost[last],f[i]);
}
}
}
cout << f[m];
}