noip25
T1
经过一波大力推式子,发现答案是 \(\frac{n^{2}-1}{9}\) 。
式子回头再补,可能会
Code
#include<cstdio>
#define re register
#define int long long
namespace OMA
{
int t,n;
const int p = 998244353;
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
inline int quickpow(int a,int b)
{
int ans = 1;
while(b)
{
if(b&1)
{ ans = ans*a%p; }
a = a*a%p;
b >>= 1;
}
return ans;
}
signed main()
{
t = read();
int inv = quickpow(3,p-2);
while(t--)
{
int n = read()%p,ans = 0;
/*for(re int i=1; i<=n; i++)
{
(ans += i*(i-1)%p*inv%p) %= p;
}*/
printf("%lld\n",(n%p*n%p-1)%p*quickpow(9,p-2)%p);
}
return 0;
}
}
signed main()
{ return OMA::main(); }
T2
考场想到了之前的noip14T3,当时xin用的vector 骗分...所以,我也....
好吧,是要加俩剪枝的,
- 当前枚举长度超过原串,直接break,换集合中的下一个串去接,
- 如果当前接出来的串对答案无贡献,那也break,因为在一个没出现过的串上加字符,怎么加也不会再产生贡献。不加第二个只能拿20pts
用了个vector和map。
我也不知道为什么我要这么认真的讲暴力,大概因为只会写暴力吧QAQ
40pts
#include<map>
#include<vector>
#include<cstdio>
#include<cstring>
#define MAX 10010
#define re register
namespace OMA
{
int n,len[MAX];
long long ans;
char s[MAX],ch[MAX][MAX];
std::map<std::vector<char>,int>vis;
signed main()
{
//freopen("my.out","w",stdout);
scanf("%s%d",s+1,&n);
len[0] = strlen(s+1);
//printf("\n");
for(re int i=1; i<=len[0]; i++)
{
for(re int j=i+1; j<=len[0]; j++)
{
std::vector<char>str;
for(re int k=i; k<=j; k++)
{ str.push_back(s[k]); }
vis[str]++;
//for(re int k=0; k<str.size(); k++)
//{ printf("%c",str[k]); }
//printf("\n");
//printf("%d\n",vis[str]);
}
}
for(re int i=1; i<=n; i++)
{ scanf("%s",ch[i]+1); len[i] = strlen(ch[i]+1); }
for(re int i=1; i<=n; i++)
{
for(re int j=len[i]; j>=1; j--)
{
for(re int k=1; k<=n; k++)
{
for(re int l=1; l<=len[k]; l++)
{
if(l+len[i]-j+1>len[0])
{ break ; }
std::vector<char>str;
for(re int x=j; x<=len[i]; x++)
{ str.push_back(ch[i][x]); }
for(re int x=1; x<=l; x++)
{ str.push_back(ch[k][x]); }
if(!vis[str])
{ break ; }
//printf("back:%d front:%d: ",i,k);
//for(re int x=0; x<str.size(); x++)
//{ printf("%c",str[x]); }
//if(vis[str])
//{ printf(" true %d",vis[str]); }
//printf("\n");
ans += vis[str];
}
}
}
}
printf("%lld\n",ans);
return 0;
}
}
signed main()
{ return OMA::main(); }
正解还没改出来,所以先咕了。
T3
考场上推出了\(k=2\),但没想到也是\(k>5\) 的时候,加上当时脑抽,一心去推\(k=3\)的, 式子没推出来,其他式子还码错了。不过竟然能过样例
正解就是推式子。
原式子不想写了,直接看代码。
80pts
#include<cstdio>
#define MAX 300030
#define re register
#define int long long
namespace OMA
{
int c[MAX],inv[MAX];
int t,n[MAX],m[MAX],k[MAX];
const int p = 3e5+7;
inline int read()
{
int s=0,w=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-')w=-1; ch=getchar(); }
while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); }
return s*w;
}
inline int quickpow(int a,int b)
{
int ans = 1;
while(b)
{
if(b&1)
{ ans = ans*a%p; }
a = a*a%p;
b >>= 1;
}
return ans;
}
inline int min(int a,int b)
{ return a<b?a:b; }
inline int max(int a,int b)
{ return a>b?a:b; }
inline int abs(int a)
{ return a>=0?a:0; }
inline int C(int n,int m)
{ return m>n?0:c[n]*inv[n-m]%p*inv[m]%p; }
inline int lucas(int n,int m)
{ return !m?1:C(n%p,m%p)*lucas(n/p,m/p)%p; }
int ans;
inline int sum1(int n)
{ return (n%p*(n%p+1))>>1; }
inline int sum2(int n)
{ return (n%p-1)*n%p*(n%p+1)%p; }
#define n n[i]
#define m m[i]
#define k k[i]
inline void task0(int i)
{
ans = 0;
for(re int a=1; a<=n; a++)
{
for(re int b=1; b<=m; b++)
{ (ans += lucas(min(a,b)-1,k-1)) %= p; }
}
ans = ans*2%p;
(ans += lucas(n,k)*m%p+lucas(m,k)*n%p) %= p;
} // OK
inline void task1(int i)
{ ans = (n%p)*(m%p)%p; } // OK
inline void task3(int i)
{
for(re int len=2; len<=m; len++)
{ (ans += 4*(n-len+1)%p*(m-len+1)%p) %= p; }
for(re int len=1; len<=n/2; len++)
{ (ans += 2*abs(n-len)%p*abs(m-len-len)%p+2*abs(m-len)%p*abs(n-len-len)%p) %= p; }
}
inline void task4(int i)
{
for(re int len=2; len<=m; len++)
{ (ans += (n-len+1)%p*(m-len+1)%p)%= p ; }
for(re int len=3; len<=m; len+=2)
{ (ans += 4*(n-len+1)%p*(m-len+1)%p) %= p; }
for(re int len=1; len<=m/2; len++)
{ (ans += abs(n-len-len)%p*abs(m-len-len)%p) %= p; }
for(re int len=1; len<=n/2; len++)
{ (ans += 2*abs(n-len)%p*abs(m-len-len)%p+2*abs(m-len)%p*abs(n-len-len)%p) %= p; }
}
inline void task5(int i)
{
for(re int len=3; len<=m; len+=2)
{ (ans += (n-len+1)%p*(m-len+1)%p) %= p; }
for(re int len=1; len<=m/2; len++)
{ (ans += abs(n-len-len)%p*abs(m-len-len)%p) %= p; }
}
inline void swap(int &a,int &b)
{ int t=a; a=b; b=t; }
signed main()
{
t = read();
for(re int i=1; i<=t; i++)
{ n = read(),m = read(),k = read(); }
int top = p-1;
c[0] = inv[0] = 1;
for(re int i=1; i<=top; i++)
{ c[i] = i*c[i-1]%p; }
inv[top] = quickpow(c[top],p-2);
for(re int i=top-1; i; i--)
{ inv[i] = (i+1)*inv[i+1]%p; }
for(re int i=1; i<=t; i++)
{
if(n<m)
{ swap(n,m); }
task0(i);
if(k==1)
{ task1(i); }
else if(k==2)
{ ; }
else if(k==3)
{ task3(i); }
else if(k==4)
{ task4(i); }
else if(k==5)
{ task5(i); }
else
{ ; }
printf("%lld\n",ans);
}
return 0;
}
}
signed main()
{ return OMA::main(); }
然而这过不了后两个点,会T,考虑将式子中的循环拆开。
目前正在化\(k=5\),等回头化出来,再补上吧。
noip25的更多相关文章
随机推荐
- 2021/2/5 关于new的一个教训
千万不要在类构造函数的初始化里new任何东西,这会导致析构函数delete一个野指针!构造函数一定要把所有的指针初始化为nullptr! 以下代码会报错(堆内存崩溃): Integer::Intege ...
- Luogu P4553 80人环游世界
link 题目大意 自东向西有 \(n\) 个国家.有 \(m\) 个人,他们可以选择 \(n\) 个国家中任意一个开始,任意一个结束,但路线必须自东向西,且第 \(i\) 个国家必须恰好经过 \(v ...
- Java基础之反射总结
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- deepin安装Motrix,cocomusic
1,motrix(下载工具):https://motrix.app/ 2,cocomusic(开源音乐播放器):https://github.com/xtuJSer/CoCoMusic/release ...
- robotframework - PO设计
1.添加新建好的资源 2.测试用例原始代码如下(未做任何分离的数据) *** Settings ***Library SeleniumLibraryResource UI分层一.txtResource ...
- PO封装设计模式 -- Web页面端测试
一.已登录页面 -->新建PO封装的包 -- 以下源码适用于python3以上的版本 代码优化新增 Image -->对操作步骤进行截图 二.basepage 包基础类的封装如下: fro ...
- browse下载插件DownThemAll!
DownThemAll!是一个不错的下载插件,它安装在各类browse上.
- 【原创】如何通过-y和-v使用库文件
在进行仿真时,经常遇到设计代码中需要调用一些标准的库文件,但是在设计的编译列表filelist中却没有相应的库文件,这时为了完成仿真,需要设计人员提供对应的库文件或者库文件所在的路径,然后仿真时将这些 ...
- 记一次 .NET 某云采购平台API 挂死分析
一:背景 1. 讲故事 大概有两个月没写博客了,关注我的朋友应该知道我最近都把精力花在了星球,这两个月时间也陆陆续续的有朋友求助如何分析dump,有些朋友太客气了,给了大大的红包,哈哈,手里面也攒了1 ...
- c语言学习篇二【基础语法】
一.定义常量: 使用 #define 预处理器. 使用 const 关键字. #include <stdio.h> int main() { const int LENGTH = 10;/ ...