首页 > 其他分享 >The 2023 ICPC Asia Hefei Regional Contest Test I. Linguistics Puzzle

The 2023 ICPC Asia Hefei Regional Contest Test I. Linguistics Puzzle

时间:2023-12-02 20:36:01浏览次数:50  
标签:Linguistics typedef Contest int Puzzle long trs include define

Preface

这题yysy真不难,但比赛的时候想出做法后没时间写了,只能遗憾地看着倒计时结束


Solution

直接上爆搜复杂度肯定会爆,考虑有哪些数是可以不用搜直接推出来的

首先样例启发我们\(0,1\)这两个数很好确定,因为\(0\)对应的字母单独出现的次数肯定最多,而\(1\)作为两位的开头出现的次数肯定最多

那么我们就想能不能用一些和具体组合无关的量来量化每个字符和数字,我们将这种值称为特征值

很容易想到统计以下三个量:每个数字/字符单独出现的次数、每个数字/字符在两位数的开头出现的次数、每个数字/字符在两位数的结尾出现的次数

这样写一发交上去当然会喜提WA(不然赛时要被过穿了),但我们把\(n\le 52\)范围内有冲突的数打个表会发现,最多也只会有两组数即四个数会无法用这种方法区分

那么直接爆搜剩余冲突的情况即可,单组复杂度\(O(4!\times n^2)\),可以通过此题

#include<cstdio>
#include<iostream>
#include<utility>
#include<vector>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<set>
#include<array>
#include<random>
#include<bitset>
#include<ctime>
#include<limits.h>
#include<assert.h>
#include<unordered_set>
#include<unordered_map>
#define RI register int
#define CI const int&
#define mp make_pair
#define fi first
#define se second
#define Tp template <typename T>
using namespace std;
typedef long long LL;
typedef long double LDB;
typedef unsigned long long u64;
typedef __int128 i128;
typedef pair <int,int> pi;
typedef vector <int> VI;
typedef array <int,3> tri;
const int N=55;
int t,n,c1[N],s1[N],s2[N],sp[N],c1_[N],s1_[N],s2_[N],used[N],ans[N],c[N][N],c_[N][N];
int main()
{
	//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
	ios::sync_with_stdio(0); cin.tie(0);
	for (cin>>t;t;--t)
	{
		RI i,j,k; for (cin>>n,i=0;i<n;++i) c1[i]=s1[i]=s2[i]=sp[i]=0;
		for (i=0;i<n;++i) c1_[i]=s1_[i]=s2_[i]=used[i]=0;
		for (i=0;i<n;++i) for (j=0;j<n;++j) c[i][j]=c_[i][j]=0;
		for (i=0;i<n;++i) for (j=0;j<n;++j)
		{
			int x=i*j; if (x<n) { ++c1[x]; continue; }
			++s1[x/n]; ++s2[x%n]; ++c[x/n][x%n];
		}
		vector <int> err; static int id[10];
		for (i=0;i<n;++i) for (j=i+1;j<n;++j)
		if (c1[i]==c1[j]&&s1[i]==s1[j]&&s2[i]==s2[j])
		err.push_back(i),err.push_back(j),sp[i]=sp[j]=1;
		auto trs=[&](const char& ch)
		{
			if ('a'<=ch&&ch<='z') return ch-'a';
			return ch-'A'+26;
		};
		for (i=0;i<n*n;++i)
		{
			string s; cin>>s;
			if (s.size()==1) { ++c1_[trs(s[0])]; continue; }
			++s1_[trs(s[0])]; ++s2_[trs(s[1])]; ++c_[trs(s[0])][trs(s[1])];
		}
		for (i=0;i<n;++i) if (!sp[i])
		for (j=0;j<n;++j) if (c1[i]==c1_[j]&&s1[i]==s1_[j]&&s2[i]==s2_[j]) ans[i]=j,used[j]=1;
		vector <int> wl; for (i=0;i<n;++i) if (!used[i]) wl.push_back(i);
		for (i=0;i<err.size();++i) id[i]=i;
		//assert(err.size()==0||err.size()==2||err.size()==4);
		//assert(wl.size()==0||wl.size()==2||wl.size()==4);
		do
		{
			for (i=0;i<err.size();++i) ans[err[i]]=wl[id[i]];
			bool flag=1; for (i=0;i<n&&flag;++i) if (c1[i]!=c1_[ans[i]]) flag=0;
			for (i=0;i<n&&flag;++i) for (j=0;j<n&&flag;++j)
			if (c[i][j]!=c_[ans[i]][ans[j]]) flag=0;
			if (flag) break;
		} while (next_permutation(id,id+err.size()));
		for (i=0;i<n;++i) cout<<char(ans[i]<26?ans[i]+'a':ans[i]-26+'A'); cout<<endl;
	}
	return 0;
}

标签:Linguistics,typedef,Contest,int,Puzzle,long,trs,include,define
From: https://www.cnblogs.com/cjjsb/p/17872171.html

相关文章

  • ALGO ARTIS Programming Contest 2023 Autumn(AtCoder Regular Contest 168)
    Preface先补一下这场ARC的博客,因为在来回合肥的路上一直在想这场的CD,所以有空后就先把这场补了A-<Inversion>不难发现对于一段连续的<,设其长度为\(x\),则它最少要贡献\(\frac{x(x+1)}{2}\)的答案而我们很容易构造一种方案刚好满足这个下界,只要让每段的结束比下一段的开头大......
  • The 2021 Sichuan Provincial Collegiate Programming Contest
    Preface下下周还要去打重庆市赛,最近就找些省赛来练练手不得不说省赛的签到题是真的多,人均10+的过题看起来还是很恐怖的这场虽然因为徐神缺席,而且前面的题目都让祁神来写导致罚时略高,但无所谓反正最后也摸到了11题(主要是没有字符串)A.Chuanpai某不知题意的签到#include<bits......
  • The 2023 ICPC Asia Hefei Regional Contest
    目录写在前面赛时FEJGC补题写在最后写在前面赛时题目按照过题顺序排序,赛后补题按照个人向难度排序。省流版:要寄了吗?没寄。赛时F开局我正开,过了五分钟发现已经有人手刹了F了,几分钟之内大屏幕上一车提交,看了一下发现是超级签到于是Nebulyu上机开写。冲完之后发现T了????\(10......
  • AtCoder Beginner Contest 330
    B-MinimizeAbs1思维题题意:给定一个范围,你选择一个数,使得思路:如果A[i]在l,r中间,那么直接打印就行,如果不是就打印就近的usingnamespacestd;voidsolve(){ intn,l,r; cin>>n>>l>>r; for(inti=1;i<=n;i++){ intx; cin>>x; if(x<l){ cout<<l<<"......
  • AtCoder Beginner Contest 326
    A-2UP3DOWN#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){inta,b;cin>>a>>b;if(a<bandb-a<=2)cout<<"Yes\n";elseif(a>banda......
  • AtCoder Beginner Contest 322
    A-FirstABC2#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definempmake_pairusingvi=vector<int>;usingpii=pair<int,int>;voidsolve(){intn;strings;cin>>n>>s;......
  • TOYOTA SYSTEMS Programming Contest 2023(AtCoder Beginner Contest 330)
    TOYOTASYSTEMSProgrammingContest2023(AtCoderBeginnerContest330)A-CountingPassesintmain(){IOS;cin>>n>>m;intans=0;rep(i,1,n)cin>>k,ans+=k>=m;cout<<ans;return0;}B-......
  • AtCoder Beginner Contest 330
    A-CountingPasses(abc330A)题目大意给定\(n\)个学生的分数,以及及格分\(x\),问多少人及格了。解题思路依次判断即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;intmain(void){ios::sync_with_stdio(false);cin.ti......
  • The 2021 ICPC Asia Shenyang Regional Contest
    Preface合肥前的最后一场VP了,本来计划是我和祁神两个人打,但后面徐神还是来救场了然后这场我们过的最难的两题都是徐神切的,直接给我们抬进Au区了属于是而且徐神最后也差一点写出G(TLEon72),同时也一眼秒了D(没时间写了),看来这场让三个徐神来打感觉10题随便出线了A.ABiteofTey......
  • AtCoder Beginner Contest 329 F
    AtCoderBeginnerContest329FF-ColoredBall(atcoder.jp)(启发式合并)问题陈述有\(N\)个编号为\(1,2,\ldots,N\)的盒子。最初,盒子\(i\)中有一个颜色为\(C_i\)的小球。给你\(Q\)个查询,你要按顺序处理。每个查询都由一对整数\((a,b)\)给出,并要求您执行以下......