寒假训练day2:Good Bye 2020

A题:https://codeforces.com/contest/1466/problem/A

题意:给出n个在x轴上的点的坐标,任意选择两点与(0,1)构成三角形,求三角形的可能面积总共有多少个?

思路:由于点在x轴和y轴上,所以构成的三角形一定是个直角三角形,并且一条直角边是固定为1的,那么三角形的所有可能面积数就等于三角形所有可能的底边数,而我们可以通过枚举底边的所有可能,使用set进行一个去重,最后输出set的大小即可。

代码:

int n;    cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
set<int> s;
for(int i = 1; i <= n; i++)
  for(int j = i + 1; j <= n; j++)
    s.insert(a[i] - a[j]);
cout << s.size() << endl;

B题:https://codeforces.com/contest/1466/problem/B

题意:给定一个数字序列,并且每个数字具有两种可能性,①保持不变,②在原有基础上+1,求解最多可以有多少个不同的数字?

思路:既然是求最大有多少个不同元素,我们还是可以很自然的联想到使用STL中的Set,如果x没出现过,那么我们就将x插入到集合中,否则我们判断x+1是否出现过,没有出现我们就将x+1插入到集合中,否则不插入,最后set的大小即是答案。

代码:

set<int> ans;
int n;    cin >> n;
for(int i = 1; i <= n; i++) {
  int x;    cin >> x;
  if(ans.count(x) == 0) ans.insert(x);
  else if(ans.count(x + 1) == 0) ans.insert(x + 1);
}
cout << ans.size() << endl;

C题:https://codeforces.com/contest/1466/problem/C

题意:给定一个字符串,通过改变k个字符的值使得整个字符串在删除任意个首尾元素后不存在回文串,求需要改变多少次。

思路:通过观察,我们可以发现只需要判断第i-1个字符和第i-2个字符是否于第i个字符相同,若相同,就需要将第i个字符改变,这是个结论,可以由归纳法证明。

代码:

void slove(string s) {
    int sum = 0;
    for(int i = 1; i < s.size(); i++) {
        if(s[i] == s[i - 1] || s[i] == s[i - 2]) {
            s[i] = ' ';
            sum++;
        }
    }
    cout << sum << endl;
    return ;
} 

E题:https://codeforces.com/contest/1466/problem/E

题意:给出n个值,计算

 

思路:这是一道需要化简的题,其实这个式子可以分解为其实这个式子可以分解为,并且可以分开计算,而还可以用二进制继续分解,分解方式为表示x[j]的第p位,因为每位之间互不干扰,就可以交换一下计算顺序,或运算同理。

 

代码:

void solve(){
    memset(cnt,0,sizeof(cnt));
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
    for(int i=1;i<=n;i++)
        for(int j=0;j<=60;j++)
            cnt[j]+=((a[i]>>j)&1);
    LL ans=0;
    for(int i=1;i<=n;i++){
        LL sumand=0,sumor=0;
        for(LL j=0,power=1;j<=60;j++,power=power*2%mod){
            if(a[i]>>j&1){
                sumand=(sumand+power*cnt[j]%mod)%mod;
                sumor=(sumor+power*n%mod)%mod;
            }
            else{
                sumor=(sumor+power*cnt[j]%mod)%mod;
            }
        }
        ans=(ans+sumand*sumor%mod)%mod;
    }
    printf("%lld\n",ans);
        
}

 

 

 

 

 

 

 

 



 

posted @ 2020-12-31 23:54  ACM-Epoch  阅读(81)  评论(0编辑  收藏  举报