题意有点让人看不懂,我琢磨了好久...
题意:
给你一个n行,每一行是一个牌,可以看作是一个整体。这个一行里面有k个元素,元素的范围在0,1,2中任选其一。问你n行中有多少
:五行中有两组满足条件,一组有三行,保证对应的v[i]都相等或者都不等
分析:
因为只有0,1,2组成。所以只有四种搭配
因为各不相同,所以必有一组被重新选择
要想凑成两组,必须要有一个被重复,两个不一样。
所以我们就这个必须要选的进行操作
开始枚举两个随意的,另一个必选的就可以被确定下来了,然后进行计数就可以了
这个代码实现的非常漂亮
有很多地方值得去学习
下面放代码(学习的是cup大佬QAQ)
- #pragma GCC optimize(1)
- #pragma GCC optimize(2)
- #pragma GCC optimize(3,"Ofast","inline")
- #define IOS ios::sync_with_stdio(false), cin.tie(0);
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- #define int long long
- typedef long long ll;
- typedef pair<int,int> PAII;
- const int N=2e6+10,M=5050,INF=1e18,mod=998244353;
- int get(int x)
- {
- return x*(x-1)/2;
- }
- signed main(){
- //IOS;
- int T;
- T=1;
- //cin>>T;
- while(T--)
- {
- int n,k;
- cin>>n>>k;
- vector
int> > a(n, vector<int>(k)); - map
int>,int> mp; - for(int i=0;i
- {
- for(int j=0;j
- cin>>a[i][j];
- }
- for(int i=0;i
- {
- for(int j=i+1;j
- {
- vector<int> v(k);
- for(int z=0;z
6-a[i][z]-a[j][z])%3;//可以确定必选的每一位数 - mp[v]++;
- }
- }
- int sum=0;
- for(int i=0;i
- {
- sum+=get(mp[a[i]]);
- }
- cout<
"\n"; - }
- return 0;
- }
- /*
- vector< vector
> v(m, vector(n) );定义了一个vector容器 - 元素类型为vector
,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。 - */
-
相关阅读:
让百度快速收录新网站的方法是什么 让百度快速收录新网站的方法有哪些
服用5年份筑基丹 - React篇
定制.NET 6.0的依赖注入
关于IP-Adapter的十几个模型,到底是干啥用的?
【java、微服务】MQ
图文并茂:JVM内存布局详解
IO进线程:共享内存
【python】OpenCV—Color Detection
【2022最新核心面试资料 】最强Java面试八股文秋招offer召唤术!入职薪资53k
Item 37: Make std::threads unjoinable on all paths.
-
原文地址:https://blog.csdn.net/m0_63305704/article/details/127778755