icpc沈阳站记录

Posted 吃花椒的妙酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了icpc沈阳站记录相关的知识,希望对你有一定的参考价值。

icpc沈阳站记录
2021.11.22凌晨
从昨晚紧张到辗转反侧,虽然早就做好了打铁的心理准备,但待到比赛最后一刻两道铜牌题还没出时,满脑子的不甘心。当然最后肯定铁了395/576。
11.21也就是热身赛那天,和队友做好了一切准备,板子,战术,再到心理,u1s1赛前,我们还是很有信心拿牌的。赛前两周的训练,我们的训练重点就是手速签到和铜牌题,训练的时候基本稳铜,甚至常能超过以前现场赛的师兄。唉,做这么多到如今看来也确是有点可笑,因为比赛只看结果,说难听点,铁了那你的训练说白了都是低效。
复盘一下我们的比赛,两道水题稳扎稳打check几遍然后1a,此时还是rank210多左右,这时其实排名不重要,因为两个水题大家罚时差不多。
我和唐看b,吴看j,我跟唐说了下异或的传递性,唐说了下图论然后我们就往图上想,一开始没太注意异或的性质,假了最小生成树和换根dp,此时时间已经来到三个半小时了,这一切都建立在默认一个联通块里一定存在一个点为0,好了我开始演了,写了发字典树自己发现假了,下机,队友写了j的分类讨论jwa了,下机,我发现不用字典树直接数组统计就行,写一发wa了,距离结束还剩半小时,绝望!
当时觉得自己思路无敌对,队友讨论的j也写了很多ifelse,都困在自认为无敌对的窘境。最后半小时简直折磨,直到最后一刻打铁的宣判。。。

赛后发现我的b假了,一个块不一定以有0最优,我只是看到了局部相邻点最优。因为异或的性质,联通块里一个点确定了,所有点都确定了,所以我们枚举任意一个点某一位取0/1即可。
j题我输得心服口服,一个数位码问题转化成bfs做,我们真的想不到,四题铜,就算出了b,我们也会被j拦了。其实看完j后,觉得j数据范围这么小,应该是道网络流题,反正按题目模拟要考虑的情况太多了。但是因为之前做过一道类似的简单一点的分类讨论,我们觉得应该可以写出来,也就没往图上想。
唉,感觉两个铜牌题思考量不小,偏思维,日后要加强思维训练!

团队合作上,我感觉我的思路可能跟队友没讲清楚,导致没有发现我假的贪心。。。。

其他杂谈:学了快一年的算法了,严格来说是十一个月,一千出头一点的题量,回首我的战绩还是菜的抠脚,cf还没蓝,还是跟大佬们差距悬殊,依旧只能签到,出不了铜牌题。。。。但是再和过往的自己比较,从学语法时候关于void的意义各种查资料,再到学刚算法入门时听个线段树果断挂机了,再到一道线段树调三天。。。现在也会很多算法的板子了,以及在数论带给我的折磨中,学到了许多数学知识。我想说,我不甘心打铁,我也不遗憾打铁,因为还没拿铜的实力,如果真有铜的实力,跟榜出4题拿铜稳的。难受是一时,后面还是得针对性训练,明年加油。

11.23
过了一天好像也没那么难受了,如果我这cf都没上蓝名的fw能拿牌,那多少逆天了(
临近期末月了,准备预习书本知识TwT.
记录下这次刻苦铭心的打铁记录,警示自己。

2333顺便把题解随手写了

B题上面大概说了一下
再说一下,我们任意找个点dfs一下,假设找的是点x,就能得到x所在连通块里所有点到它的距离,现在就是确定下x的值,那块里所有点都能确定了。
(二进制下)若x的第i位取0,假设块里其他所有距离中第i位为1的数量为cnt,则块里所有数的第i位对sum的贡献为 2 c n t 2^cnt 2cnt,若取1,则贡献为 2 t o t − c n t 2^tot-cnt 2totcnt(tot为块大小),唉现在想想就是简单的贪心,当时怎么就固执的认为取0最优呢T - T

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define int long long 
using namespace std;
const int N=1e5+5,M=2e5+5;
const long long INF=0x7f7f7f7f7f7f7f7f;
int n,m;
struct B
	long long u,v,w;
a[M*4];

long long pi,p[N],nxt[M*4],to[M*4],cost[M*4];
bool vis[N];
long long che[N];
long long val[N];
struct Dij
	long long t,value;
	friend bool operator <(Dij i,Dij j)
	
		return i.value>j.value; 
	
;
void add_in(long long u,long long v,long long c)

	pi++;nxt[pi]=p[u];p[u]=pi;to[pi]=v;cost[pi]=c;

int  cnt[40][2];
void build(int x)

	for(int i=30 ;i>=0 ;i--)
	
		int k = (x>>i)&1;
		cnt[i][k]++;
	

void ini()

	for(int i=0 ;i<=30 ;i++) cnt[i][0] = cnt[i][1]=0; 

vector<int > v;
int work()

	int ans=0;
	int siz = v.size();
//	for(int i:v) cout<<i<<" ";
	//cout<<endl;
	for(int i=30 ;i>=0 ;i--)
	
	//	cout<<i<<" i "<<cnt[i][0]<<" "<<cnt[i][1]<<endl;
		ans += (1ll<<i)*((min(cnt[i][0],cnt[i][1])));
	
	return ans;

bool check_(int s)

	ini();
	v.clear();
	vis[s]=true;
	che[s]=0;
	queue<int> q;
//	cout<<" s "
	while(!q.empty())
	  q.pop();
	q.push(s);
	
	while(!q.empty())
	
		int u=q.front();
		q.pop();
		build(che[u]);
		v.push_back(che[u]);
		for(int k=p[u],v=to[k],c=cost[k];k;k=nxt[k],v=to[k],c=cost[k])
		
			if(!vis[v])
			
				vis[v]=true;
				che[v]= (che[u]^c);
				q.push(v);
			
			else
			
				if( (che[v]^che[u] )!=c)
				  
                
               //     cout<<" v "<<che[v]<<" "<<che[u]<<" "<<c<<endl;
                    return false;
                
			
		
	
	return true;

signed main()

	IOS;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	
		int u,v,c;
		cin>>u>>v>>c;
		add_in(u,v,c);
		add_in(v,u,c);
	
	int ans=0;
	for(int i=1;i<=n;i++)
	
		if(!vis[i])
		
			if(!check_(i))
			
				cout<<"-1";
				return 0;
			
//				for(int i=1;i<=n;i++)
//	 		 cout<<che[i]<<' '; 
	 		 ans += work();
	 		 //cout<<ans<<endl;
		
	
//	cout<<" ans "<<endl;
	cout<<ans<<endl;
	return 0;

J题 bfs
每一步转的数字只能是连续的,转化为bfs的话一共就20个方向,只要存10个,然后分上下转就行了。
要注意的是,每次询问单独bfs会超时,需要预处理把所有状态跑一下,一共就0000~9999个状态,然后O(1)处理询问即可
赛时缺少了对状态数量的判断

#define _CRT_SECURE_NO_WARNINGS
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <list>
#include <queue>
#include <vector>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <deque>
#include <set>
#include <bitset>
using namespace std;
typedef long long ll;
#define _for(i,a,b) for(int i=(a) ;i<=(b) ;i++)
#define _rep(i,a,b) for(int i=(a) ;i>=(b) ;i--)
#define scd(v) scanf("%d",&v)
#define scdd(a,b) scanf("%d %d",&a,&b)
#define endl "\\n"
#define IOS ios::sync_with_stdio(false),cin.tie(0)
#define pb push_back
#define all(v) v.begin(),v.end()
#define mst(v,a) memset(v,a,sizeof(v))
#define ls p<<1
#define rs p<<1|1
//#define int long long
#define inf 0x7f7f7f7f
#define fi first
#define se second
#define pii pair<int , int >
#define ls p<<1
#define rs p<<1|1
#define lson p<<1,l,mid
#define rson p<<1|1,mid+1,r
#define AC return 0
const int N = 1e6 + 10;
const double eps = 1e-6;
char s1[10], s2[10];
int dir[][4] =

    1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,
    1,1,0,0,0,1,1,0,0,0,1,1,
    1,1,1,0,0,1,1,1,
    1,1,1,1
;
struct ty

    int a, b, c, d;
    ty(int a, int b, int c, int d) :a(a), b(b), c(c), d(d) 
    void print()
    
        cout<<" de "<<endl;
        cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
    
    bool operator == (const ty&t)
    
        return (a==t.a)&&(b==t.b)&&(c==t.c)&&(d==t.d);
    
;
int dis[12][15][15][15];
int v[11][11][11][11];
void bfs(ty s )

    dis[s.a][s.b][s.c][s.d] = 0;
    v[s.a][s.b][s.c][s.d] = 1;
    queue<ty> q; q.push(s);
    while ( !q.empty() )
    
        ty t = q.front();
        q.pop();
        for (int i = 0; i < 10; i++)
        
            int a = (t.a + dir[i][0])%10;
            int b = (t.b + dir[i][1])%10;
            int c = (t.c + dir[i][2])%10;
            int d = (t.d + dir[i][3])%10;
            if ( !v[a][b][c][d] )
            
                v[a][b][c][d]=1;
                dis[a][b][c][d] = dis[t.a][t.b][t.c][t.d] + 1;
                ty nt =  a,b,c,d ;
                q.push(nt);
            
        
        for (int i = 0; i < 10; i++)
        
            int a = (t.a - dir[i][0]+10) % 10;
            int b = (t.b - dir[i][1]+10) % 10;
            int c = (t.c - dir[i][2icpc沈阳站记录

2017 ICPC沈阳站 G题 Infinite Fraction Path多源BFS+剪枝

第45届ICPC沈阳站部分题解(DFGHIK)

第45届ICPC沈阳站部分题解(DFGHIJK)

2021.07.18 ICPC沈阳游记

2016ICPC沈阳站