2025CSP游记

省流:跳了跳了

J组

前两题秒了

T3糖丸了,首先想到字典树,把序列做个前缀异或和丢到字典树上,然后就可以log级别找到异或和为 \(k\) 的区间了。最后将找出来的所有端点丢到dp里

然后发现做法全部假了,其实 \(O(1)\) 就可以找出和他异或和为 \(k\) 的数,这波属于唐完了。

骗了个分

T4不会数学,把特殊性质全部骗走了

然后就是和同学交流,发现同学全部AK了,完了我好慌,下午S组不打好我就要退役了

S组

T1觉得有点像花店橱窗布置,然后写了个dp怒调一个半小时,果断放弃并骗走部分分。

后来发现貌似是个反悔贪心,后悔没好好学贪心/ll

T1糖丸了

T2发现是个比较板的最小生成树,怎么说?难道我1=有希望了吗?

然后怕ccf卡我的复杂度放弃枚举村庄

我的代码大概是这样的

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m, k, cw[105][10005], c[105], p;
int citynum, cnt, f[5000005];
int nowEdgenum, used[5000005];
int ans, usedcity[105];
int find(int x)
{
	if(f[x] == x) return x;
	return find(f[x]);
 } 
struct edge
{
    int u, v, w, flag, id;
}a[5000005];
bool cmp(edge a, edge b)
{
    return a.w < b.w;
}
signed main()
{
    cin >> n >> m >> k;
    for(int i = 0; i <= n + k + 114; i++) f[i] = i;
    for(int i = 1; i <= m; i ++)
    {
        cnt ++;
        cin >> a[cnt].u >> a[cnt].v >> a[cnt].w;
        a[cnt].flag = 0;
        a[cnt].id = cnt;
    }
    p = n;
    for(int i = 1; i <= k; i++)
    {
        cin >> c[i];
        p ++;
        for(int j = 1; j <= n; j++)
        {
            cin >> cw[i][j];
            cnt ++;
            a[cnt].u = p;
            a[cnt].v = j;
            a[cnt].w = cw[i][j] + c[i];
            a[cnt].flag = i;
            a[cnt].id = cnt;
        }
    }
//    for(int i = 1; i <= cnt; i++)
//    {
//    	cout << a[i].u << " " << a[i].v << " " << a[i].w << endl;
//	}
//	cout << "-------------" << endl;
    sort(a + 1, a + cnt + 1, cmp);
    for(int i = 1; i <= cnt; i++)
    {
        if(used[a[i].id]) continue;
        int u = a[i].u, v = a[i].v;
        int fu = find(u), fv = find(v);
        if(fu == fv) continue;
        cout << u << " " << v << " " << a[i].w << endl;
        f[f[u]] = fv;
        used[a[i].id] = 1;
        nowEdgenum ++; 
        ans += a[i].w;
        if(nowEdgenum >= n + citynum - 1)
        {
            break;
        }
        int flag = a[i].flag;
        if(flag && !usedcity[flag])
        { 
        	usedcity[flag] = 1; 
//        cout << "城市化改造" << endl; 
        	citynum ++;
            for(int j = 1; j <= cnt; j++)
            {
//            	cout <<"对比 "<< a[j].flag << " " << flag<< endl; 
                if(a[j].flag == flag)
                {
                    a[j].w -= c[flag];
                }
            }
            sort(a + 1, a + cnt + 1, cmp);
            i = 0;
        }
    }
    cout << ans << endl;
}

就是这份代码过了前三组大样例,只有最后一个大样例过不去,当时一直找不到问题就没追究了

然后放洛谷上交发现只有4分???什么,我直接跳

T3T4完全不会打暴力,跳了跳了。

希望T2的数据水一点,放过我吧/ll/ll/ll

貌似今年比2022年的S组都难?2022年HN的分数线是50分,感觉1=又有希望了

完全没发挥出自己的水平

真的要寄了

posted @ 2025-11-01 22:59  间水月  阅读(43)  评论(2)    收藏  举报