#421 Div.2 D. Mister B and PR Shifts

题目链接:
http://codeforces.com/contest/820/problem/D

大意:
给一个数组 p[i]
这里写图片描述 值。
每次操作旋转一次数组(即最后一个数字变为第一个) 如 1 2 3 -> 3 1 2
这里写图片描述 的最小值 输出最小值和变换次数。
input
3
1 2 3
output
0 0
input
3
2 3 1
output
0 1
input
3
3 2 1
output
2 1

#include<bits/stdc++.h>
using namespace std;
#define D(v) cout<<#v<<" "<<v<<endl
#define LL long long
int p[1000005], cur[2000005];
int main(void)
{
    LL ans,sum;
    int n,L,r,i,temp;
    scanf("%d", &n);
    sum = L = r = temp = 0;
    for(i=1;i<=n;i++)
        scanf("%d", &p[i]);
    for(i=1;i<=n;i++)
    {
        sum += abs(p[i]-i);
        if(p[i]>=i)  L++, cur[p[i]-i]++;//cur[i]可以理解为再向后移动i位后a[i]-i>=0。
        else  r++;
    }
    ans = sum;
    for(i=0;i<n-1;i++)
    {
        L -= cur[i]; r += cur[i];
        sum = sum-L+r-abs(p[n-i]-n-1)+abs(p[n-i]-1);//相当于p[n-i]先移到后面的n+1位置 再从n+1移到1
        cur[p[n-i]+i]++; //重新更新 L , r 和 cur[]
        L++, r--; //...
        if(sum<ans)
            ans=sum,temp=i+1;
    }
    printf("%lld %d\n",ans,temp);
    return 0;
}

参考博客:
http://www.cnblogs.com/TnT2333333/p/7091392.html

`java.lang.UnsupportedOperationException` 这个异常通常出现在尝试对某个对象执行特定操作,而这个对象并未实现该操作的实现版本时。在 Java 和 JSON 应用场景中,当你尝试将 `LocalDateTime` 对象直接转换成 JSON 格式时可能会抛出此异常。 在处理 JSON 数据时,尤其是通过第三方库如 Jackson、Google Gson 等,它们通常提供用于序列化 (`JsonSerializable`) 和反序列化 (`JsonDeserializable`) 的支持。默认情况下,这些库对于基本数据类型和一些常见的集合有内置的支持,但对于某些特殊类型的对象(例如 `LocalDateTime`),需要显式地告知如何进行序列化和反序列化。 ### 解决方案: 当遇到 `UnsupportedOperationException` 异常时,可以采取以下几个步骤解决这个问: 1. **检查配置**:确认是否在使用 Jackson 或其他 JSON 处理库时进行了正确的配置。有时需要在代码中启用特定的功能,例如自定义 `SerializerProvider` 或者在 `ObjectMapper` 中注册适配器。 ```java ObjectMapper mapper = new ObjectMapper(); // 注册 LocalDateTime 的序列化适配器 mapper.registerModule(new JavaTimeModule()); ``` 2. **自定义序列化器**:如果上述配置无法解决问,可能需要编写自定义序列化器来适应特定需求。Jackson 提供了强大的模块系统,可以注册自定义的序列化器。 ```java public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); } } ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); mapper.registerModule(new CustomModule()); // 自定义模块 ``` 3. **JSON 适配器**:确保所有依赖于 JSON 操作的对象都已正确适配到所使用的 JSON 库中。这可能包括自定义适配器或者使用现有的库功能(如 Gson 的 `@Expose` 注解)。 4. **日志记录和调试**:检查错误堆栈信息,查看何时及为何抛出 `UnsupportedOperationException`。这有助于定位问所在,并进一步确定解决方案。 ### 相关问: 1. **如何在 Jackson 中注册自定义序列化器?** 2. **在 Java 中处理日期时间与 JSON 的常见问有哪些?** 3. **如何在 Spring Boot 应用中自动配置 Jackson 序列化本地日期时间?**
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值