网站开发自学还是培训金融网站织梦模板
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;
 }
