泉州市做网站优化网络产品运营与推广
B这个题目在20分钟的时候发现了取模的规律,但是在写法上我竟然犹豫了,这影响了我后面题目的心态 过于可惜了 但是没关系,现在不会,之后就会写了
这里强调一下,sort不会改变原先的顺序,就是说如果两个相等的数字,不会被调顺序,我们尽可能不要去改变sort中的排序,这里加上一个负号就变成了从小到大排序
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define int long long
const int N = 3e5 + 10;int a[N];signed main()
{int t;cin >> t;while(t --){int n,k;cin >> n >> k;vector<pair<int,int>> v;for(int i = 1;i <= n;i ++){cin >> a[i];a[i] %= k;if(a[i] == 0) cout << i << " ";else v.push_back({-a[i],i});} sort(v.begin(),v.end());for(auto c : v) cout << c.second << " ";cout << endl;}}
C
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
ll l[N],r[N];
void work(){
int n,m;
string s;
cin>>n>>m;
cin>>s;
s=’ '+s;
l[0]=0;r[n+1]=n+1;
// 101100
for(int i=1;i<=n;i++)
if(s[i]‘1’) l[i]=l[i-1];
else l[i]=i;
for(int i=n;i>=1;i–)
if(s[i]‘1’) r[i]=i;
else r[i]=r[i+1];
set<pair<ll,ll>> se;
int x,y;
while(m–){
cin>>x>>y;
x=r[x];
y=l[y];
if(x>=y) x=y=0;
se.insert({x,y});
}
printf(“%d\n”,se.size());
}
int main(){
int t;
cin>>t;
while(t–)
work();
return 0;
}