【无标题】

CSP-J模拟二补题报告(2024.10.4)
一、得分情况
T1[下棋(chess)】:100分
T2[汪洋(BigWater)】:0分
T3[删数(delnum)】:0分
T4[平分糖果(candy)】:0分
总分:100分
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
二、比赛概况
T1:AC
T2:没读懂题
T3:思路不对
T4:用模拟做的
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
三、题目分析
1.题目大意
T1[下棋(chess)】普通的排序
T2[汪洋(BigWater)】矩形前缀和
T3[删数(delnum)】二分lower_bound,去除数字
T4[ 平分糖果(candy)】动态规划
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
2.考试的思路
T1:AC
T2:DFS
T3:打暴力
T4:模拟
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
3.解题思路
T1:将一星合二星,二星合三星,最后比较数值,一样编号小的在前面
T2:前进或向右转,本质找矩形作前缀和
T3:给定一组数据,将序列中第a1,a2,a3…an小的数移除,直至移除目标数字
T4:本质为多重背包,先由01背包与完全背包引入,在二进制拆分解决问题
四、AC代码(无程序输入输出)
T1:——————————————————————————————————————————————————————————————————————————————————————————————————————————————
#include
#include using namespace std; int n;
struct node {
int y; int 1; int s; int z; }a[100005];
bool cmp(node b, node c) {
if(b.s(c.s) return 0; else if(b. sc. s) {
if (b. 1Kc. 1) {
return 0; else if(b. 1
c. 1) if(b. y(c.y) {
return 0; else if(b. yc. y) {
if(b. z)c. z) {
return 0: 1
else return 1: else
{
return 1; else
{
return 1: 1
else return 1; |
int main() {
//freopen(“chess. in”, “r”, stdin); //freopen(“chess. out”, “w”, stdout); scanf(%d", &n);
for(int i=1; i<=n; i++) {
cin>>a[i]. y>>a[i]. 1>>a[i]. s; a[i].=i;
for(int i=1; i<=n; i++) {
if(a[i]. y>=3) {
int sum=ali]. y/3; a[i]. 1+=sum; a[i]. y-=sum3; 1
for(int i=1; i(=n; i++) {
if (a[i].1>=3)
int sum=a[i].1/3; a[i]. s+=sum; a[i].1-=sum
3; 1
]
sort (a+1, a+n+1, cmp); /cout<<“\n”:
for(int i=l: i<=n; i++) {
cout<<a[i]. y<<‘<a[i].1<’<a[i]. s<<“\n”; cout<<“\n”;
/
for(int i=1: i<=n; i++) {
cout<<a[i]. z<<‘’: //fclose(stdin);
//fclose(stdout): |
T2:——————————————————————————————————————————————————————————————————————————————————————————————————————————————
#include
using namespace std;
int xqzh[1005],yqzh[1005];
int sum1[1050][1005],a[1050][1050],sum2[1030][1050];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
sum1[i][j]=sum1[i][j-1]+a[i][j];
sum2[i][j]=sum2[i][j-1]+a[j][i];
}
}
int maxx=-0x3f3f3f3f;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int s=100+sum1[1][j]+sum1[i][j]+sum2[1][i]+sum2[j][i];
s=s-a[1][1]-a[1][j]-a[i][1]-a[i][j];
maxx=max(s,maxx);
}
}
cout<<maxx;
}
T3:——————————————————————————————————————————————————————————————————————————————————————————————————————————————
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
long long n,a[N],q;
long long fun(long long x)
{
long long ans=0;
int index=lower_bound(a+1,a+n+1,x)-a;
if(index
n+1||a[index]!=x)
{
index–;
}

for(int i=index;i>=1;i--)
{
    if(x<a[i]) continue;
    if((x-a[i])%i==0)
    return ans+(x-a[i])/i+1;
    long long num=(x-a[i])/i+1;
    ans+=num;
    x-=num*i;
}
return -1;

}
int main()
{

cin>>n;
for(int i=1;i<=n;i++)
{
    cin>>a[i];
}
cin>>q;
while(q--)
{
    int k;
    cin>>k;
    cout<<fun(k);
}



return 0;

}
T4:———————————————————————————————————————————————————————————————————————————————————————————————————————————————
#include
using namespace std;
#define ll long long
#define N 100005
int a[N],cnt=0;
bool dp[N];
bool pd()
{
ll m=a[1]+a[2]*2+a[3]*3+a[4]4+a[5]5+a[6]6;
if(m%2==1) return 0;
m/=2;
for(int i=0;i<m;i++) dp[i]=false;
dp[0]=true;
for(int t=1;t<=6;t++)
{
for(int i=1;i<=a[t];i
=2)
{
a[t]-=i;
for(int j=m;j>=i
t;j–)
{
dp[j]=dp[j]||dp[j-i
t];
}

	}
	if(a[t]!=0)
		{
			for(int j=m;j>=a[t]*t;j--)
			{
				dp[j]=dp[j]||dp[j-a[t]*t];
			}
		}
 	if(dp[m]) return true;
}
return 0;

}
int main()
{
cnt=0;
while(cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6])
{
if(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]==0) break;
cnt++;
// cout<<cnt;
printf(“Collection #”);
cout<<cnt<<‘:’<<endl;
if(pd())
{
cout<<“Can be divided.”<<“\n”;
}
else
{
cout<<“Can’t be divided.”<<“\n”;
}
cout<<“\n”;
}
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————
五、反思
1.题意化简,化成自己对应理解的题意
2.累乘,累加,注意数据范围,在题目空间允许下全开long long
3.字符串、字符类使用cin,cout输出,数字类指数级若达到5次方,使用scanf,printf、
4.对于有把握的题目,至少手搓3组样例
5.多组测试数据加换行,数据清空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值