QLU_凉心的比赛(一)补题

B - 线段的包含关系

题目大意:
给定一个序列a1,a2,…an,一个编号为1到n的一维判断,要求找到两个不同的索引i和j,使ai位于aj内。[l1,r1]位于[l2,r2]内,前提是 l1 ≥ l2, r1 ≤ r2。要求打印索引i和j。如果有多个答案,打印其中任何一个即可。如果没有答案,打印-1 -1。
解题思路:
直接开一个结构体数组,里面存储区间的左边界和右边界以及区间的序列号。然后对区间进行排序(比赛的时候就是因为排序方法不正确。。题没做出来)即:左边界小的在前面,若左边界相等则右边界大的在前面。然后从头遍历,因为左边界小的在前面,所以在比较时不用管左边界的事了,因为已经有序了,然后只需要比较当前区间的右边界和下一个区间的,右边界就行了。如果当前区间的右边界大于下一个区间的右边界,则下一个区间在当前区间内。然后输出对应的序列号即可。(感觉最重要的还是区间的排序还是太菜了 )
正式题解:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e6;
typedef long long ll;
int n;     //区间的数量
int i,j,k;   //控制循环
struct node
{
  ll l;  //左端点的坐标
  ll r;  //右端点的坐标
  int num;   //区间的编号
}s[maxn];
int cmp(node a,node b)
{
  if(a.l==b.l)
   return a.r>b.r;
  return a.l<b.l;
}
int main()
{
  cin>>n;
  for(i=1;i<=n;i++)
  {
    s[i].num=i;
    cin>>s[i].l>>s[i].r;
  }
  sort(s+1,s+1+n,cmp);
  for(i=1;i+1<=n;i++)
  {
    if(s[i].r>=s[i+1].r)
    {
      cout<<s[i+1].num<<" "<<s[i].num<<endl;
      return 0;
    }
  }
  cout<<-1<<" "<<-1<<endl;

  return 0;
}

C - 地下城还有劳拉

题目大意:
给定一个迷宫的行数和列数以及劳拉行走过的次数,让求出劳拉当前的位置。(劳拉先从左上角出发一直行走到左下角)然后一直向右走到边界处,再向上走一格再向左走到第二列再向上走一格再向右走到边界再向上走一格…如此蛇形走位,到达(1,2)处时停止行动。
解题思路:

大致示意图
在第一列中,从左边的示意图可以看出k<n时坐标就是(k+1,1)。
其余的则按照右边的示意图进行处理,首先k-=n;可以发现所在方格的行为n-k/(m-1)。
当所在行为偶数时,列就是k%(m-1)+2,否则是m-k%(m-1)。
正式题解:

#include<iostream>
using namespace std;
typedef long long ll;
ll n,m,k;
ll r,l;   //行和列
int main()
{
  cin>>n>>m>>k;
  if(k<n)
   cout<<k+1<<" "<<1<<endl;
  else
  {
    k-=n;
    r=k/(m-1);
    if(r%2!=0)
     l=m-k%(m-1);
    else
     l=k%(m-1)+2;
    cout<<n-r<<" "<<l<<endl;
  }

  return 0;
}

(get到一个判断奇偶性的新方法:n&1;当结果为1时说明n是奇数,否则是偶数)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同样的,需要先解析JWT token,获取其中的payload部分。使用第三方库github.com/dgrijalva/jwt-go来进行解析,具体代码如下: ```go import ( "fmt" "github.com/dgrijalva/jwt-go" ) func main() { tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjMsImV4cCI6MTY4NTc3OTYwOSwiaWF0IjoxNjg1MTc0ODA5LCJpc3MiOiJDYXJnbyIsInN1YiI6InVzZXIgdG9rZW4ifQ.t7OVtwRE1IobIYRjsaJgJCZDHp4jBlO3VZc9Dsi-t5E 7436229=skey%3D%40Uyta2flI3%3Buin%3Do0007436229%3Bp_skey%3Dqm4lF-L8Gunzmcu3w9VAz1mMYy5jGuP72ecdQ-pzdc8_ 1023250836=skey%3D%40HTv3Ryui3%3Buin%3Do1023250836%3Bp_skey%3DS5zhIlqb2Y-mvHo377gfE9CFHC45BP-FaYudutu2QLU_" token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { return []byte("secret"), nil // 这里可以替换成自己的加密密钥 }) if err != nil { fmt.Println("Error parsing JWT token:", err) return } payload := token.Claims.(jwt.MapClaims) fmt.Println(payload) } ``` 解析出来的payload是一个map,其中包含了UserId、exp、iss和sub等键值对,以及还原的skey、uin和p_skey键值对。需要注意的是,1023250836=skey%3D%40HTv3Ryui3%3Buin%3Do1023250836%3Bp_skey%3DS5zhIlqb2Y-mvHo377gfE9CFHC45BP-FaYudutu2QLU_是一个整体,需要再进行一次解码才能得到其中的键值对。具体代码如下: ```go import ( "fmt" "net/url" "strings" ) func main() { tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjMsImV4cCI6MTY4NTc3OTYwOSwiaWF0IjoxNjg1MTc0ODA5LCJpc3MiOiJDYXJnbyIsInN1YiI6InVzZXIgdG9rZW4ifQ.t7OVtwRE1IobIYRjsaJgJCZDHp4jBlO3VZc9Dsi-t5E 7436229=skey%3D%40Uyta2flI3%3Buin%3Do0007436229%3Bp_skey%3Dqm4lF-L8Gunzmcu3w9VAz1mMYy5jGuP72ecdQ-pzdc8_ 1023250836=skey%3D%40HTv3Ryui3%3Buin%3Do1023250836%3Bp_skey%3DS5zhIlqb2Y-mvHo377gfE9CFHC45BP-FaYudutu2QLU_" tokenParts := strings.Split(tokenString, " ") // 解析JWT token token, err := jwt.Parse(tokenParts[0], func(token *jwt.Token) (interface{}, error) { return []byte("secret"), nil // 这里可以替换成自己的加密密钥 }) if err != nil { fmt.Println("Error parsing JWT token:", err) return } payload := token.Claims.(jwt.MapClaims) fmt.Println(payload) // 解码1023250836=skey%3D%40HTv3Ryui3%3Buin%3Do1023250836%3Bp_skey%3DS5zhIlqb2Y-mvHo377gfE9CFHC45BP-FaYudutu2QLU_,获取键值对 kvString := strings.Split(tokenParts[2], "=")[1] kvString, _ = url.QueryUnescape(kvString) kvParts := strings.Split(kvString, ";") skey := strings.Split(kvParts[0], "=")[1] uin := strings.Split(kvParts[1], "=")[1] p_skey := strings.Split(kvParts[2], "=")[1] fmt.Println(skey, uin, p_skey) } ``` 这样就可以获取到所有的键值对了,需要注意的是,skey、uin和p_skey中包含了特殊字符,需要进行解码才能得到真正的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值